2011-09-02 50 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),但是數據庫中有大量從連接池創建的未決連接。在退出程序之前,所有連接都應被強制關閉。我不能等待交易結束。我想要一些激進的接近呼叫。 –

相關問題