為什么我們須要一個新的連接池?
這里有幾個原因:
1.DBCP 1.x是單線程的。
為了成為線程安全的 共享鎖整個池在短時間內在兩個對象 分配和對象返回。
注意,這并不適用 下議院DBCP 2.x。
2.DBCP 1.x能夠緩慢。 邏輯cpu數量的添加和 并發線程的數量試圖借或返回 對象的添加,性能會減少。 對高并發 系統能夠顯著的影響。
請注意,這并不適用 Commons DBCP 2.x。
3.DBCP超過60類。
tomcat-jdbc-pool核心是8類, 因此未來需求將須要更少的改動 的變化。
這是全部你須要執行連接池本身 歇息是肉汁。
4.DBCP使用靜態接口。
這意味著你必須使用 正確的版本號為給定的JRE版本號或您可能會看到NoSuchMethodException例外。
5.不值得重寫60多個類,當一個連接池 是一個更簡單的實現完畢。
6.Tomcat jdbc池實現檢索連接的能力 異步,無需添加額外的線程庫 本身。
7.Tomcat jdbc池是Tomcat模塊,這取決于Tomcat朱莉·, 簡化的日志框架用于Tomcat。
8.檢索底層連接使用javax.sql.PooledConnection接口。
9.饑餓的證明。 假設池是空的,和線程正在等待 返回連接,連接時,將醒著 正確的線程等待。
大多數池僅僅會餓死。
10.特性添加了其它連接池實現
11.支持高并發環境和多核心/ cpu系統。
12.動態實現的接口,將支持java.sql和javax.sql接口 您的執行時環境(僅僅要你的JDBC驅動程序做了相同的事情),即使編譯較低版本號的JDK。
13.驗證間隔——我們不須要驗證我們每一次使用的連接,我們能夠做到這一點 當我們借或返回的連接,就不是我們能夠配置比間隔更頻繁。
14.Run-Once查詢,一個可配置的查詢,將僅僅執行一次,當連接到數據庫。 很實用的設置會話設置,您想要存在在整個時間建立連接。
15.配置自己定義攔截器的能力。 這同意您編寫自己定義攔截器來增強功能。 您能夠使用攔截器收集查詢統計, 緩存會話狀態,又一次連接失敗,重試查詢,緩存查詢結果,等等。 你的選擇是無盡的,攔截器是動態的,而不是綁定到一個JDK版本號的java.sql/javax.sql接口。
16.高性能——我們將展示一些性能上的差異
17.很easy,因為很簡化實現,行數和源文件數量很低,和c3p0相比 有200多個源文件(上次我們檢查),Tomcat jdbc 8的核心文件,連接池本身就是一半 那 錯誤可能發生,他們會更快的追蹤,和更easy修復。
降低復雜性一直是重點從《盜夢空間》。
18.異步檢索——你能夠連接你的連接請求和接收隊列Future<Connection>回來了。
19.更好的空暇連接處理。 而不是直接關閉連接,它仍然能夠連接池大小和空暇池的智能算法。
20.你能夠決定什么時候連接被覺得是放棄了,當池滿了,還是直接在超時 通過指定一個池的使用門檻。
21.放棄連接計時器將重置/查詢活動發表聲明。 同意一個連接,在使用非常長一段時間不超時。 這是通過使用ResetAbandonedTimer
22.關閉連接后,連接為一個特定的時間。
年齡接近基于返回到池中。
23.JMX通知,當連接被懷疑是廢棄的日志條目。
這類似于 的removeAbandonedTimeout但它不採取不論什么行動,僅僅是報告的信息。 這是通過使用suspectTimeout屬性。
24.連接能夠從檢索java.sql.Driver,javax.sql.DataSource或javax.sql.XADataSource這是通過使用dataSource和dataSourceJNDI屬性。
25.支持 JMX,支持 XA Connection
tomcat7的數據庫連接池tomcatjdbc的25優勢