1. 程式人生 > >資料庫連線池 Druid(阿里)

資料庫連線池 Druid(阿里)

1. Druid是什麼?

    Druid是Java語言中最好的資料庫連線池。Druid能夠提供強大的監控和擴充套件功能。

 

2. 在哪裡下載druid

    正式版本下載:

    maven中央倉庫: http://central.maven.org/maven2/com/alibaba/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關聯監控怎麼配置?

    Web關聯監控配置

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

    Spring關聯監控配置

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_Druid%E5%92%8CSpring%E5%85%B3%E8%81%94%E7%9B%91%E6%8E%A7%E9%85%8D%E7%BD%AE

 

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. 有沒有和其他資料庫連線池的對比?

    各種資料庫連線池對比https://github.com/alibaba/druid/wiki/%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%AF%B9%E6%AF%94

 

14. 從其他連線池遷移要注意什麼?

    不同連線池的引數參照對比: http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=6947005

    DBCP遷移 https://github.com/alibaba/druid/wiki/DBCP%E8%BF%81%E7%A7%BB

 

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的辦法。

1) 從http://repo1.maven.org/maven2/com/alibaba/druid/druid-wrapper/ 下載druid-wrapper-xxx.jar

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. 我想試用快照版本,怎麼獲取?

    直接獲取快照版本的地址是: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驅動的資料庫。實際測試過的有

 

26. Oracle下jdbc executeBatch時,更新行數計算不正確

    使用jdbc的executeBatch 方法,如果資料庫為oracle,則無論是否成功更新到資料,返回值都是-2,而不是真正被sql更新到的記錄數,這是Oracle JDBC Driver的問題,Druid不作特殊處理。

 

27. Druid如何自動根據URL自動識別DriverClass的

    Druid是根據url字首來識別DriverClass的,這樣使得配置更方便簡潔。

 

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