我们有一个按日期划分数据的系统。因此,例如在SqlServer中,我们每月有一个数据库。每个月分区使用包含在C3P0连接池DataSource中的Jdbc驱动程序数据源。
经过一段时间后,分区的日期范围变得足够大,我们想让它脱机。在这种情况下,我们只从可用列表中删除相关月份的DataSource。但是,理想情况下,当离线时,我想“关闭”数据源,以便池放弃所有与数据库的连接。
DataSource没有密切的方法让我打电话所以我不知道如何清理它。
有什么建议吗?
答案 0 :(得分:9)
您没有关闭DataSource
- 您DataSource
关闭返回的连接。 DataSource
本身永远不会“开放”。
我希望游泳池在超时后放弃打开连接,所以我建议你不要担心它:)如果你需要强行关闭连接,你需要保留一个参考连接池本身并直接使用c3p0提供的任何工具。
答案 1 :(得分:7)
如果您使用C3PO 池化 DataSources,那么您可以使用DataSources.destroy(DataSource)释放与DataSource关联的线程和连接。
答案 2 :(得分:1)
在我的情况下,@ sudocode的答案不起作用,所以我获得了合并的数据源,我关闭了它:
ComboPooledDataSource datasource =
(ComboPooledDataSource) envContext.lookup("jdbc/oracledb");
datasource.close();