我正在开发一个工具,它接收不同的连接参数来测试不同数据库中的值( jNRPE中的Nagios插件,它保持到不同数据库的开放连接)。因为配置是动态的(可能有更多的数据库,或者可以删除它们),所以我不能有一个配置文件。
我想知道每个数据库是否应该有一个C3P0实例,还是可以使用相同的实例,每次请求连接时只更改URL?
代码位于github:c3p0.java
如果不是,如何动态地获得多个数据库的多个池?
发布于 2014-11-08 08:32:17
对于每个JDBC url,您将需要一个不同的c3p0 DataSource。连接池必须包含同构连接:从客户端的角度来看,所有签出的连接都必须是等效的。如果来自多个数据库的连接包含在同一个池中,则客户端将无法指定或知道与哪个数据库通信。
(如果您正在复制一个只读DB,并且您真的希望多个源的连接驻留在一个池中,因为从客户端的角度来看,它们肯定是等价的,您可以通过定义一个自定义的、非池化的、循环执行或随机选择复制者的DataSource,然后通过C3P0的DataSources工厂将DataSource集中起来。)
动态创建和配置c3p0 DataSources非常容易。参见示例代码这里。
如果将动态配置捕获为c3p0属性名到值的映射,则还会有一个另一种,更简洁的方式来获取具有该配置的DataSource。
https://stackoverflow.com/questions/26785842
复制相似问题