簡體   English   中英

由於現有的連接仍在當前線程上,因此無法打開新連接-ActiveJDBC

[英]Cannot open a new connection because existing connection is still on current thread - ActiveJDBC

我收到此錯誤, Cannot open a new connection because existing connection is still on current thread一段時間后Cannot open a new connection because existing connection is still on current thread 我認為該錯誤很容易解釋。 我的代碼是這樣的:

字符串mySQLUrl =“ jdbc:postgresql://” + dataLayer.PostgreSQL_Host +“ /” + dataLayer.PostgreSQL_Database;

Base.open(“ org.postgresql.Driver”,mySQLUrl,dataLayer.getPostgreSQLUser(),dataLayer.getPostgreSQLPassword());

為了避免該錯誤,我想創建一個連接工廠,但是要實現此目的,我需要知道如何驗證是否打開了一個連接(並且仍然有效)並返回它,否則,請創建它。 是否有內置的東西或我應該使用舊的嘗試捕獲器? :|

如果遇到此異常,則意味着在打開新線程時,當前線程上仍具有連接。 這種類型的代碼可能會導致連接泄漏,因此框架會阻止您這樣做。

此頁面: http : //javalite.io/database_connection_management#thread-connection-propagation解釋了模型在當前線程上找到了連接

由於您沒有為您的應用程序提供任何上下文,因此我將舉幾個示例。

如果這是批處理應用程序(獨立應用程序),則需要打開一個連接,使用它然后關閉:

try(DB db = Base.open(...)){

  // your code here
}

這將確保關閉連接並從當前線程中刪除該連接。 如果您使用的是ActiveWeb,則可以使用DBConnectionFilterhttp : //javalite.io/database_configuration與任何Web應用程序一樣,您將在處理請求之前打開一個連接(從連接池中拉出),在您的控制器 ,然后在請求結束時關閉連接(返回到池)。

如果您不使用ActiveWeb,則可以編寫一個簡單的Servlet Filter來完成此操作,這是一個示例: ActiveJdbcFilter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM