近期项目需要使用scala构建一套日志实时收集分析系统,其中需要把日志记录到Postgresql中,为了解决数据库链接复用,这里介绍下在scala语言中基于alibaba的diruid.pool库构建数据库连接池

先贴代码

package store

import java.sql.Connection
import com.alibaba.druid.pool.DruidDataSource
import config.Configs._

/**
 * PgSql 连接工厂
 */
object PgSqlConnection {
  private var druidDataSource = new DruidDataSource

  def getConnection() = {
    druidDataSource.setDriverClassName("org.postgresql.Driver")
    // 例:"jdbc:mysql://192.168.0.1:3306/mydbname?serverTimezone=UTC"
    druidDataSource.setUrl(PgDbUrl)
    druidDataSource.setUsername(PgDbUser)
    druidDataSource.setPassword(PgDbPwd)
    // 设置连接池的一些参数
    // 1.数据库连接池初始化的连接个数
    druidDataSource.setInitialSize(50)
    // 2.指定最大的连接数,同一时刻可以同时向数据库申请的连接数
    druidDataSource.setMaxActive(200)
    // 3.指定小连接数:在数据库连接池空闲状态下,连接池中保存的最少的空闲连接数
    druidDataSource.setMinIdle(30)
    var con:Connection = null
    try {
      con = druidDataSource.getConnection
      System.out.println("创建pgsql连接池:" + con)
    } catch {
      case e: Exception =>
        System.out.println("-----------pgsql get connection has exception , msg = " + e.getMessage + ", trace="+e.getStackTrace)
    }
    con


  }
}

其他JDBC类似,如Mysql连接池下


package store

import java.sql.Connection
import com.alibaba.druid.pool.DruidDataSource
import config.Configs.{DbUrl,DbUser,DbPwd}

/**
 * MySql 连接工厂
 */
object MySqlConnection {
  private var druidDataSource = new DruidDataSource

  def getConnection() = {
    druidDataSource.setDriverClassName("com.mysql.jdbc.Driver")
    // 例:"jdbc:mysql://192.168.0.1:3306/mydbname?serverTimezone=UTC"
    druidDataSource.setUrl(DbUrl)
    druidDataSource.setUsername(DbUser)
    druidDataSource.setPassword(DbPwd)
    // 设置连接池的一些参数
    // 1.数据库连接池初始化的连接个数
    druidDataSource.setInitialSize(50)
    // 2.指定最大的连接数,同一时刻可以同时向数据库申请的连接数
    druidDataSource.setMaxActive(200)
    // 3.指定小连接数:在数据库连接池空闲状态下,连接池中保存的最少的空闲连接数
    druidDataSource.setMinIdle(30)
    var con:Connection = null
    try {
      con = druidDataSource.getConnection
      System.out.println("创建mysql连接池:" + con)
    } catch {
      case e: Exception =>
        System.out.println("-----------mysql get connection has exception , msg = " + e.getMessage)
    }
    con
  }
}