我有幾個servlet在Tomcat服務器上工作。現在我讓他們爲每個請求創建數據庫連接並在使用後關閉它們。這可能會導致建立/關閉連接的巨大開銷。使用單個連接管理器servlet共享所有servlet之間的全局連接(即所有servlet使用相同的連接)如何?這是一個很好的做法,還是可能會出現併發操作問題?全局MySQL連接或每個請求一個連接?
1
A
回答
2
你應該閱讀有關連接池:
C3PO,BoneCP,DBCP
這是可用的最好的和流行的連接池,我在我的生產項目使用BoneCP。
2
我認爲你需要考慮如果可能的話使用連接池。
這樣你不需要擔心創建連接/關閉開銷。
當你想連接時,你可以從池中獲取它,當你完成連接時,調用close()方法返回連接池。
查看此discussion瞭解連接池的工作原理。
1
這可能會導致建立/關閉連接的巨大開銷。
你說的對,連接的建立和關閉如果太頻繁就證明是昂貴的操作。
怎麼樣使用一個單獨的連接管理器的servlet來分享所有servlet之間的全球連接(即所有servlet使用相同的連接)
雖然JDBC規範並不阻止共享的連接通過多線程,這被認爲是不好的做法,因爲它可能是驅動程序實現相關的。因此,每個數據庫會話一個連接會導致更便攜和可維護的代碼。
JDBC規範建議使用DataSource
對象池連接以避免上面提到的開銷。
爲了得到連接時,應用程序可以與交互或者:
- DriverManager類與一種或多種驅動程序實現
OR
- DataSource實現工作
使用DataSource對象是首選方法,因爲它增強了應用程序的可移植性,它使代碼維護更加容易,並且它使得應用程序透明地使用連接池和分佈式事務處理成爲可能。所有建立到數據源的連接的J2EE組件都使用一個 DataSource對象來獲取連接。
相關問題
- 1. 與cassandra的永久連接或每個請求的連接?
- 2. RedisClusterClient,每個線程一個連接或一個連接
- 3. 全局連接變量或每次新建一個
- 4. IPC:爲每個請求連接或保持套接字打開?
- 5. MySQL連接器/ NET連接每個連接多個DataReader?
- 6. Express.JS + Node-Mysql和每個http請求1個連接
- 7. 請求與多個連接
- 8. 連接兩個Ajax請求
- 9. MySQL,視圖是全局還是每個會話/連接?
- 10. OkHttp每個主機或全局連接池maxIdleConnections?
- 11. MySQL的禁用每個會話連接觸發請求
- 12. SQL一個請求連接表GROUP_CONCAT
- 13. 每個請求與ADO.net的連接,是或否?
- 14. 在memcached持久連接或每個請求
- 15. 維護一個安全的MySQL連接
- 16. 單個連接中的多個請求?
- 17. MySQL的左連接或與全文檢索全連接結果
- 18. 更好的方法是在每個請求上有一個從節點或連接到memcached/mongo的全局連接?
- 19. Rails:在每個請求上切換連接,但保留連接池
- 20. 爲什麼持久性PDO連接會與每個請求建立新連接?
- 21. 連接和連接請求超時
- 22. MySQL的左連接請求不能找到一個錯誤
- 23. 在整個應用程序上共享數據庫連接或在每個請求上連接到數據庫?
- 24. Linkedin連接搜索每個連接的第一個職位
- 25. 在每個單一的非查詢或整個連接之前打開連接?
- 26. MySQL數據庫和ASP.NET全局連接
- 27. Node.js和全局MySQL連接OBJ
- 28. Node.js服務器:連接到redis數據庫一次?或在每個請求?
- 29. MySQL全外連接
- 30. 如何請求安全連接(https)?
我試過BoneCP,現在它工作的很好。謝謝 – NSF