gpt4 book ai didi

java - 使用 HikariCP 连接池到多个数据库

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:22 27 4
gpt4 key购买 nike

我正在开发一个查询多个数据库的监控插件。我想使用 HikariCP 来保持连接打开,但我不知道如何实例化连接池。

HikariCP 是否只对多个数据库使用一个池?或者一个数据库只有一个池,我有责任实例化与我将使用的数据库一样多的池。

最佳答案

后者:池与单个数据库配置参数相关联,您有责任实例化与我将使用的数据库一样多的池。相应地创建池。

我有一个 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

关于java - 使用 HikariCP 连接池到多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com