2011-09-02 139 views
0

我正在使用连接池和Spring TransactionTemplate。如果要首先关闭连接池,则必须将所有连接返回到池中,这意味着必须调用connection.close()。我有一个线程使用TransactionTemplate进行某些查询,另一个线程想要在连接池上调用某种关闭方法,但在执行此操作之前,首先必须告知TransactionTemplate关闭所有连接(实际上只将它们返回给池)。用Spring TransactionTemplate取消当前事务

在Spring中如何做到这一点,以立即调用关闭使用的连接?

回答

0

如果您正在使用Hibernate和Spring请使用沿着:

hibernate.connection.release_mode=after_transaction 

如果你想释放只是交易后连接。

hibernate.connection.release_mode=after_statement 

如果你想每个语句

这两个设置的唯一途径后释放连接,我知道,这将使使用的连接被释放而不是默认的行为更快。至少就Hibernate而言。如果您正在使用其他库,请描述哪些。

+0

我正在直接使用TransactionTemplate,没有其他框架。 Mycode - > Spring事务 - > JDBC - >数据库Hibernate是否将这些设置转换为Spring框架中的某些调用? –

+0

我想你正在使用DataSourceTransactionManager。它是这样工作的。如果你在你的TransactionTemplate对象上调用commit,它将委托给它的transactionManager实现。无论发生什么,DataSourceTransactionManager实现将最终清理事务。一个人认为清理是连接释放。如果你在日志中输入“debug”(org.springframework.jdbc package)级别,你会看到你的连接在成功提交后被释放。如果您的数据源正在实施SmartDataSource,则连接将不会关闭。 – goroncy

+0

是的,谢谢,我知道。也许我的问题并不清楚:即使交易仍在运行,我想关闭连接。选项1将在linux中使用“kill”,或者在java中使用System.exit(0),但是数据库中有大量从连接池创建的未决连接。在退出程序之前,所有连接都应被强制关闭。我不能等待交易结束。我想要一些激进的接近呼叫。 –

相关问题