Druid以及Druid和常見的資料庫連線池對比(轉載 )
寫的灰常好非常細,關鍵是還有各種資料庫連線池的對比,條理比較清晰。
1. Druid是什麼?
Druid是Java語言中最好的資料庫連線池。Druid能夠提供強大的監控和擴充套件功能。
2. 在哪裡下載druid
3. 怎麼獲取Druid的原始碼
Druid是一個開源專案,原始碼託管在github上,原始碼倉庫地址是 https://github.com/alibaba/druid。同時每次Druid釋出正式版本和快照的時候,都會把原始碼打包,你可以從上面的下載地址中找到相關版本的原始碼
4. 怎麼配置maven
Druid 0.1.18 之後版本都發布到maven中央倉庫中,所以你只需要在專案的pom.xml中加上dependency就可以了。例如:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
5. 怎麼開啟Druid的監控統計功能
6. 怎樣使用Druid的內建監控頁面
7. 內建監控中的Web和Spring關聯監控怎麼配置?
8. 怎麼配置防禦SQL注入攻擊
9. Druid有沒有參考配置
10. 我想日誌記錄JDBC執行的SQL,如何配置
11. 我的程式可能產生連線洩漏了,有什麼辦法?
12. 在Druid中使用PSCache會有記憶體佔用過大問題麼?
13. 有沒有和其他資料庫連線池的對比?
14. 從其他連線池遷移要注意什麼?
15. Druid中有沒有類似Jboss DataSource中的ExceptionSorter
ExceptionSorter是JBoss DataSource中的優秀特性,Druid也有一樣功能的ExceptionSorter,但不用手動配置,自動識別生效的。具體看這裡:https://github.com/alibaba/druid/wiki/ExceptionSorter_cn
16. Druid中的maxIdle為什麼是沒用的?
maxIdle是Druid為了方便DBCP使用者遷移而增加的,maxIdle是一個混亂的概念。連線池只應該有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分別相當於maxPoolSize和minPoolSize。
17. 我的應用配置的是JNDI資料來源,可以用DruidDataSource麼?
18. 我的應用已使用DBCP,是程式碼中寫死的,怎樣更換為Druid?
可以的,Druid提供了一箇中完全平滑遷移DBCP的辦法。
- 2) 加入druid-xxx.jar
- 3) 從你的WEB-INF/lib/中刪除dbcp-xxx.jar
- 4) 按需要加上配置,比如JVM啟動引數加上-Ddruid.filters=stat,動態配置druid的filters
這種用法,使得可以在一些非自己開發的應用中使用Druid,例如在sonar中部署druid,sonar是一個使用jruby開發的web應用,寫死了DBCP,只能夠通過這種方法來更換。
19. 我想試用快照版本,怎麼獲取?
20. 有一些SQL執行很慢,我希望日誌記錄下來,怎麼設定?
21. 我希望加密我的資料庫密碼怎麼辦?
22. 如何參與Druid的開發
23. Druid的釋出週期是怎樣?
Druid是一個活躍的專案,長期維護。每個月有一個釋出視窗,除非遇到重大bug和非常緊急的需求,否則都是每個月最多釋出一次。如果沒有足夠多的需求,釋出視窗就不會被使用。
24. 如果DruidDataSource在init的時候失敗了,不再使用,是否需要close
是的,如果DruidDataSource不再使用,必須呼叫close來釋放資源,釋放的資源包括關閉Create和Destory執行緒。
25. DruidDataSource支援哪些資料庫?
理論上說,支援所有有jdbc驅動的資料庫。實際測試過的有
資料庫 | 支援狀態 |
mysql | 支援,大規模使用 |
oracle | 支援,大規模使用 |
sqlserver | 支援 |
postgres | 支援 |
db2 | 支援 |
h2 | 支援 |
derby | 支援 |
sqlite | 支援 |
sybase | 支援 |
26. Oracle下jdbc executeBatch時,更新行數計算不正確
使用jdbc的executeBatch 方法,如果資料庫為oracle,則無論是否成功更新到資料,返回值都是-2,而不是真正被sql更新到的記錄數,這是Oracle JDBC Driver的問題,Druid不作特殊處理。
27. Druid如何自動根據URL自動識別DriverClass的
Druid是根據url字首來識別DriverClass的,這樣使得配置更方便簡潔。
字首 | DriverCLass | 描述資訊 |
jdbc:odps | com.aliyun.odps.jdbc.OdpsDriver | |
jdbc:derby | org.apache.derby.jdbc.EmbeddedDriver | |
jdbc:mysql | com.mysql.jdbc.Driver | |
jdbc:oracle | oracle.jdbc.driver.OracleDriver | |
jdbc:microsoft | com.microsoft.jdbc.sqlserver.SQLServerDriver | |
jdbc:sybase:Tds | com.sybase.jdbc2.jdbc.SybDriver | |
jdbc:jtds | net.sourceforge.jtds.jdbc.Driver | |
jdbc:postgresql | org.postgresql.Driver | |
jdbc:fake | com.alibaba.druid.mock.MockDriver | |
jdbc:mock | com.alibaba.druid.mock.MockDriver | |
jdbc:hsqldb | org.hsqldb.jdbcDriver | |
jdbc:db2 | COM.ibm.db2.jdbc.app.DB2Driver | DB2的JDBC Driver十分混亂,這個匹配不一定對 |
jdbc:sqlite | org.sqlite.JDBC | |
jdbc:ingres | com.ingres.jdbc.IngresDriver | |
jdbc:h2 | org.h2.Driver | |
jdbc:mckoi | com.mckoi.JDBCDriver | |
jdbc:cloudscape | COM.cloudscape.core.JDBCDriver | |
jdbc:informix-sqli | com.informix.jdbc.IfxDriver | |
jdbc:timesten | com.timesten.jdbc.TimesTenDriver | |
jdbc:as400 | com.ibm.as400.access.AS400JDBCDriver | |
jdbc:sapdb | com.sap.dbtech.jdbc.DriverSapDB | |
jdbc:JSQLConnect | com.jnetdirect.jsql.JSQLDriver | |
jdbc:JTurbo | com.newatlanta.jturbo.driver.Driver | |
jdbc:firebirdsql | org.firebirdsql.jdbc.FBDriver | |
jdbc:interbase | interbase.interclient.Driver | |
jdbc:pointbase | com.pointbase.jdbc.jdbcUniversalDriver | |
jdbc:edbc | ca.edbc.jdbc.EdbcDriver | |
jdbc:mimer:multi1 | com.mimer.jdbc.Driver |