【发布时间】:2021-09-07 11:35:09
【问题描述】:
我在我的多租户应用程序中使用 HikariCP:-
private Map<Object, Object> targetDataSources = new HashMap<>();
AbstractRoutingDataSource dataSource = new TenantAwareRoutingSource();
public Object insertTenants(String tenantName, String dataSource,String url, String user, String password) throws Exception {
targetDataSources.put(tenantName, buildDataSource(dataSource,url,user,password));
dataSource.setTargetDataSources(targetDataSources);
dataSource.afterPropertiesSet();
return dataSource;
}
int i = 0;
private DataSource buildDataSource(String dataSource, String url, String user, String password) {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setInitializationFailTimeout(0);
dataSource.setMinimumIdle(1);
dataSource.setPoolName("pool ->> " + i);
dataSource.setMaximumPoolSize(1);
dataSource.setIdleTimeout(300000);
dataSource.setMaxLifetime(30000);
dataSource.setConnectionTimeout(60000);
dataSource.setDataSourceClassName(dataSource);
dataSource.addDataSourceProperty("url", url);
dataSource.addDataSourceProperty("user", user);
dataSource.addDataSourceProperty("password", password);
i++;
return dataSource;
}
以上代码允许在应用程序运行时创建数据源。
对于每个数据源,我正在创建新的池名称,但在调试模式下,我只能看到第一个池(即池 ->> 1)
2021-09-07 16:32:39.580 DEBUG 13360 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : pool ->> 1 - Added connection org.postgresql.jdbc.PgConnection@50c0f9ec
2021-09-07 16:32:39.580 DEBUG 13360 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : pool ->> 1 - After adding stats (total=5, active=0, idle=5, waiting=0)
2
当我插入新租户和尝试访问新的 tanant db 时,我可以访问它,但我无法在调试状态下看到该池名称(即 pool ->> 2)仍然显示池->> 1 中的
如何在调试器中查看其他池的详细信息。
任何建议都会有所帮助。
为每个租户创建一个新池是个好主意吗?
【问题讨论】: