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>

也可以選擇 Maven倉庫查找公共的倉庫地址:http://www.mvnrepository.com/artifact/com.alibaba/druid

5. 怎麼打開Druid的監控統計功能

Druid的監控統計功能是通過filter-chain擴展實現,如果你要打開監控統計功能,配置StatFilter,具體看這裏:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

6. 怎樣使用Druid的內置監控頁面

內置監控頁面是一個Servlet,具體配置看這裏:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE

7. 內置監控中的Web和Spring關聯監控怎麼配置?

8. 怎麼配置防禦SQL注入攻擊

Druid提供了WallFilter,它是基於SQL語義分析來實現防禦SQL注入攻擊的。具體配置看這裏:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter

9. Druid有沒有參考配置

不同的業務場景需求不同,你可以使用我們的參考配置,但建議你仔細閱讀相關文檔,瞭解清楚之後做定製配置。https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE

10. 我想日誌記錄JDBC執行的SQL,如何配置

Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter,具體配置看這裏https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

11. 我的程序可能產生連接泄漏了,有什麼辦法?

Druid提供了多種監測連接泄漏的手段,具體看這裏:https://github.com/alibaba/druid/wiki/%E8%BF%9E%E6%8E%A5%E6%B3%84%E6%BC%8F%E7%9B%91%E6%B5%8B

12. 在Druid中使用PSCache會有內存佔用過大問題麼?

連接Oracle數據庫,打開PSCache,在其他的數據庫連接池都會存在內存佔用過多的問題,Druid是唯一解決這個問題的連接池。具體看這裏:https://github.com/alibaba/druid/wiki/Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8BPreparedStatementCache%E5%86%85%E5%AD%98%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88

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麼?

DruidDataSource支持JNDI配置,具體看這裏:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_JNDI_Tomcat 
具體實現的類是這個:com.alibaba.druid.pool.DruidDataSourceFactory,你可以閱讀代碼加深理解。

18. 我的應用已使用DBCP,是代碼中寫死的,怎樣更換爲Druid?

可以的,Druid提供了一箇中完全平滑遷移DBCP的辦法。

這種用法,使得可以在一些非自己開發的應用中使用Druid,例如在sonar中部署druid,sonar是一個使用jruby開發的web應用,寫死了DBCP,只能夠通過這種方法來更換。

19. 我想試用快照版本,怎麼獲取?

直接獲取快照版本的地址是:http://code.alibabatech.com/mvn/snapshots/com/alibaba/druid/ ,使用快照版本建議加入我們QQ羣 92748305,遇到問題直接反饋給我們。

20. 有一些SQL執行很慢,我希望日誌記錄下來,怎麼設置?

在StatFilter配置中有慢SQL執行日誌記錄,看這裏https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

21. 我希望加密我的數據庫密碼怎麼辦?

運維和DBA都不希望把密碼明文直接寫在配置文件中,Druid提供了數據庫祕密加密的功能。具體看這裏:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

22. 如何參與Druid的開發

Druid是一個通過github開源的項目,github的特性,使得你很容易參與其中。這裏有詳細說明https://github.com/alibaba/druid/wiki/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E

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  

28. 如何保存監控記錄

https://github.com/alibaba/druid/wiki/%E6%80%8E%E4%B9%88%E4%BF%9D%E5%AD%98Druid%E7%9A%84%E7%9B%91%E6%8E%A7%E8%AE%B0%E5%BD%95

29. 我想Log輸出SQL執行的信息怎麼辦?

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

30. 如何配置Druid內置的log實現

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AEdruid%E5%86%85%E7%BD%AE%E7%9A%84log%E5%AE%9E%E7%8E%B0

 

附:示例項目:

https://github.com/windwant/spring-dubbo-service.git
https://github.com/windwant/spring-boot-service.git
https://github.com/windwant/spring-cloud-service.git
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章