一个Scala版的连接池,并在使用Spark Streaming进行Word Count时,把每批数据都存到mySql中
这里判断的两个空不能去掉,可能有人以为在调用getDriver方法时已经判断过pool.isEmpty了,在进行判断是没有意义的,而且当 连接数已经大于等于max时,会死循环,但是要考虑到运行过成中,在spark中是多线程运行的,在调用,getConnection方法时,可能当时pool中是空的,但是在调用后,可能其他线程的数据运行完了,会还连接, 那么此时再进行判断时pool就不是空了,两个调教都不成立,才能跳出循环,此时的情况是,获取的连接数已经大于等最大(max)的值,并且 已经有人把连接还了, 就可以直接取连接了,不用再创建,也不能再创建(连接数不能大于设置的最大连接数的)
import java.sql.{
Connection, DriverManager}
import java.util
object JDBCConnectePools02 {
private val max = 10 //设置连接最大数
private val ConnectionNum = 10 //设置 每次可以获取几个Connection
private var conNum = 0//连接数
private val pool = new util.LinkedList[Connection]() //连接池
def getDriver() : Unit = {
//加载Driver
//加载
//这里判断的两个空不能去掉
//可能有人以为在调用getDriver方法时已经判断过pool.isEmpty了,
//在进行判断是没有意义的,而且当 连接数已经大于等于max时,会死循环
//但是要考虑到运行过成中,在spark中是多线程运行的,在调用
//getConnection方法时,可能当时pool中是空的,但是在调用后,
//可能其他线程的数据运行完了,会还连接,
//那么此时再进行判断时pool就不是空了,两个调教都不成立,
//才能跳出循环,此时的情况是,获取的连接数已经大于等最大(max)的值
//并且 已经有人把连接换了, 就可以直接取连接了,不用再创建
//,也不能再创建
if(conNum < max && pool.isEmpty){
//
Class.forName("com.mysql.jdbc.Driver")</