2012-09-21 74 views
1

我有幾個servlet在Tomcat服務器上工作。現在我讓他們爲每個請求創建數據庫連接並在使用後關閉它們。這可能會導致建立/關閉連接的巨大開銷。使用單個連接管理器servlet共享所有servlet之間的全局連接(即所有servlet使用相同的連接)如何?這是一個很好的做法,還是可能會出現併發操作問題?全局MySQL連接或每個請求一個連接?

回答

2

你應該閱讀有關連接池:

C3PO,BoneCP,DBCP

這是可用的最好的和流行的連接池,我在我的生產項目使用BoneCP。

+0

我試過BoneCP,現在它工作的很好。謝謝 – NSF

2

我認爲你需要考慮如果可能的話使用連接池。

這樣你不需要擔心創建連接/關閉開銷。

當你想連接時,你可以從池中獲取它,當你完成連接時,調用close()方法返回連接池。

查看此discussion瞭解連接池的工作原理。

1

這可能會導致建立/關閉連接的巨大開銷。

你說的對,連接的建立和關閉如果太頻繁就證明是昂貴的操作。

怎麼樣使用一個單獨的連接管理器的servlet來分享所有servlet之間的全球連接(即所有servlet使用相同的連接)

雖然JDBC規範並不阻止共享的連接通過多線程,這被認爲是不好的做法,因爲它可能是驅動程序實現相關的。因此,每個數據庫會話一個連接會導致更便攜和可維護的代碼。

JDBC規範建議使用DataSource對象池連接以避免上面提到的開銷。

爲了得到連接時,應用程序可以與交互或者:

  • DriverManager類與一種或多種驅動程序實現

OR

  • DataSource實現工作

使用DataSource對象是首選方法,因爲它增強了應用程序的可移植性,它使代碼維護更加容易,並且它使得應用程序透明地使用連接池和分佈式事務處理成爲可能。所有建立到數據源的連接的J2EE組件都使用一個 DataSource對象來獲取連接。

相關問題