scala-mysql数据库资源池

来源:互联网 发布:人工智能 共产 知乎 编辑:程序博客网 时间:2024/06/08 13:53
package connect

import java.sql.{Connection, DriverManager}
import java.util

/**
* mysql数据库连接池
*/
object MySqlPool {
private val max = 8 //连接池连接总数
private val connectionNum = 10 //每次产生连接数
private val pool = new util.LinkedList[Connection]() //连接池
private var conNum = 0 //当前连接池已产生的连接数

//获取连接
def getJdbcConn(): Connection = {
//同步代码块
AnyRef.synchronized({
if (pool.isEmpty) {
//加载驱动
preGetConn()
for (i <- 1 to connectionNum) {
val conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "000000")
pool.push(conn)
conNum += 1
}
}
pool.poll()
})
}

//释放连接
def releaseConn(conn: Connection): Unit = {
pool.push(conn)
}

//加载驱动
private def preGetConn(): Unit = {
//控制加载
if (conNum < max && !pool.isEmpty) {
println("Jdbc Pool has no connection now, please wait a moments!")
Thread.sleep(2000)
preGetConn()
} else {
Class.forName("com.mysql.jdbc.Driver");
}
}
}
package connect


package test.testConnectionPoll

/**
* 测试获取数据库连接池
*/
object TestConnectPool {
def main(args: Array[String]): Unit = {
for (x <- 1 to 20) {
val con = MySqlPool.getJdbcConn()
println("当前连接:" + x + " " + con)
if (x == 6) {
println("释放的是:" + x + " " + con)
MySqlPool.releaseConn(con)
}
}
}
}