使用 HikariCP 到多个数据库的连接池
Posted
技术标签:
【中文标题】使用 HikariCP 到多个数据库的连接池【英文标题】:Connection pool with HikariCP to multiple databases 【发布时间】:2015-01-12 01:08:57 【问题描述】:我正在开发一个查询多个数据库的监控插件。我想使用 HikariCP 来保持连接打开,但我不知道如何实例化连接池。
HikariCP 是否只为多个数据库使用一个池?或者一个数据库只有一个池,我有责任实例化与我将使用的数据库一样多的池。
【问题讨论】:
【参考方案1】:后者:池与单个数据库配置参数相关联,您有责任实例化与我将使用的数据库一样多的池。相应地创建池。
我有一个DataSourceFactory
来完成这个:
public final class DataSourceFactory
private static final Logger LOG = LoggerFactory.getLogger(DataSourceFactory.class);
//connection to mysql
private static DataSource mySQLDataSource;
//connection to PostgreSQL
private static DataSource postgresDataSource;
private DataSourceFactory()
//generic method to create the DataSource based on configuration
private static DataSource getDataSource(String configurationProperties)
Properties conf = new Properties();
try
conf.load(DataSourceFactory.class.getClassLoader().getResourceAsStream(configurationProperties));
catch (IOException e)
LOG.error("Can't locate database configuration", e);
HikariConfig config = new HikariConfig(conf);
HikariDataSource dataSource = new HikariDataSource(config);
return dataSource;
//retrieve the datasource for MySQL
public static DataSource getMySQLDataSource()
LOG.debug("Retrieving data source for MySQL");
if (mySQLDataSource == null)
synchronized(DataSourceFactory.class)
if (mySQLDataSource == null)
LOG.debug("Creating data source for MySQL");
mySQLDataSource = getDataSource("mysql-connection.properties");
return mySQLDataSource;
//retrieve the datasource for Postgres
public static DataSource getPostgresDataSource()
LOG.debug("Retrieving data source for Postgres");
if (postgresDataSource == null)
synchronized(DataSourceFactory.class)
if (postgresDataSource == null)
LOG.debug("Creating data source for Postgres");
postgresDataSource = getDataSource("postgres-connection.properties");
return postgresDataSource;
这是一个文件配置示例:
dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
dataSource.url=jdbc:mysql://theHostName:thePort/nameOfDatabase
dataSource.user=user
dataSource.password=thIsIsN07mYR3alPa$s
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=100
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
autoCommit=false
maximumPoolSize=10
【讨论】:
你有例子吗? @AngocA 发布示例。 我对启动多个池的最大担忧是,一个池一次不能有少于 1 个处于活动状态的连接。所以,如果你启动 30 个连接池,即使在空闲阶段,它们也至少有 30 个连接以上是关于使用 HikariCP 到多个数据库的连接池的主要内容,如果未能解决你的问题,请参考以下文章
为啥HikariCP被号称为性能最好的Java数据库连接池,如何配置使用