歡迎大家使用Druid,常見問題在這里解答,希望對大家有所幫助。
Druid是Java語言中最好的數(shù)據(jù)庫連接池。Druid能夠提供強大的監(jiān)控和擴展功能。
正式版本下載:
maven中央倉庫: http://central.maven.org/maven2/com/alibaba/druid/
Druid是一個開源項目,源碼托管在github上,源代碼倉庫地址是 https://github.com/alibaba/druid 。同時每次Druid發(fā)布正式版本和快照的時候,都會把源碼打包,你可以從上面的下載地址中找到相關(guān)版本的源碼
Druid 0.1.18 之后版本都發(fā)布到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
Druid的監(jiān)控統(tǒng)計功能是通過filter-chain擴展實現(xiàn),如果你要打開監(jiān)控統(tǒng)計功能,配置StatFilter,具體看這里:https://github.com/alibaba/druid/wiki/配置_StatFilter
內(nèi)置監(jiān)控頁面是一個Servlet,具體配置看這里:https://github.com/alibaba/druid/wiki/配置_StatViewServlet配置
Web關(guān)聯(lián)監(jiān)控配置
https://github.com/alibaba/druid/wiki/配置_配置WebStatFilter
Spring關(guān)聯(lián)監(jiān)控配置
https://github.com/alibaba/druid/wiki/配置_Druid和Spring關(guān)聯(lián)監(jiān)控配置
Druid提供了WallFilter,它是基于SQL語義分析來實現(xiàn)防御SQL注入攻擊的。具體配置看這里:https://github.com/alibaba/druid/wiki/配置-wallfilter
不同的業(yè)務(wù)場景需求不同,你可以使用我們的參考配置,但建議你仔細閱讀相關(guān)文檔,了解清楚之后做定制配置。https://github.com/alibaba/druid/wiki/配置_DruidDataSource參考配置
Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter,具體配置看這里https://github.com/alibaba/druid/wiki/配置_LogFilter
Druid提供了多種監(jiān)測連接泄漏的手段,具體看這里:https://github.com/alibaba/druid/wiki/連接泄漏監(jiān)測
連接Oracle數(shù)據(jù)庫,打開PSCache,在其他的數(shù)據(jù)庫連接池都會存在內(nèi)存占用過多的問題,Druid是唯一解決這個問題的連接池。具體看這里:https://github.com/alibaba/druid/wiki/Oracle數(shù)據(jù)庫下PreparedStatementCache內(nèi)存問題解決方案
各種數(shù)據(jù)庫連接池對比https://github.com/alibaba/druid/wiki/各種數(shù)據(jù)庫連接池對比
不同連接池的參數(shù)參照對比:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=6947005
ExceptionSorter是JBoss DataSource中的優(yōu)秀特性,Druid也有一樣功能的ExceptionSorter,但不用手動配置,自動識別生效的。具體看這里:https://github.com/alibaba/druid/wiki/ExceptionSorter_cn
maxIdle是Druid為了方便DBCP用戶遷移而增加的,maxIdle是一個混亂的概念。連接池只應(yīng)該有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分別相當于maxPoolSize和minPoolSize。
DruidDataSource支持JNDI配置,具體看這里:https://github.com/alibaba/druid/wiki/配置_JNDI_Tomcat
具體實現(xiàn)的類是這個:com.alibaba.druid.pool.DruidDataSourceFactory,你可以閱讀代碼加深理解。
可以的,Druid提供了一個中完全平滑遷移DBCP的辦法。
從http://repo1.maven.org/maven2/com/alibaba/druid/druid-wrapper/ 下載druid-wrapper-xxx.jar
加入druid-xxx.jar
從你的WEB-INF/lib/中刪除dbcp-xxx.jar
按需要加上配置,比如JVM啟動參數(shù)加上-Ddruid.filters=stat,動態(tài)配置druid的filters
這種用法,使得可以在一些非自己開發(fā)的應(yīng)用中使用Druid,例如在sonar中部署druid,sonar是一個使用jruby開發(fā)的web應(yīng)用,寫死了DBCP,只能夠通過這種方法來更換。
直接獲取快照版本的地址是:http://code.alibabatech.com/mvn/snapshots/com/alibaba/druid/ ,使用快照版本建議加入我們QQ群 92748305,遇到問題直接反饋給我們。
在StatFilter配置中有慢SQL執(zhí)行日志記錄,看這里 https://github.com/alibaba/druid/wiki/配置_StatFilter
運維和DBA都不希望把密碼明文直接寫在配置文件中,Druid提供了數(shù)據(jù)庫密碼加密的功能。具體看這里:https://github.com/alibaba/druid/wiki/使用ConfigFilter
Druid是一個通過github開源的項目,github的特性,使得你很容易參與其中。這里有詳細說明https://github.com/alibaba/druid/wiki/如何參與
Druid是一個活躍的項目,長期維護。每個月有一個發(fā)布窗口,除非遇到重大bug和非常緊急的需求,否則都是每個月最多發(fā)布一次。如果沒有足夠多的需求,發(fā)布窗口就不會被使用。
是的,如果DruidDataSource不再使用,必須調(diào)用close來釋放資源,釋放的資源包括關(guān)閉Create和Destory線程。
理論上說,支持所有有jdbc驅(qū)動的數(shù)據(jù)庫。實際測試過的有
數(shù)據(jù)庫 | 支持狀態(tài) |
mysql | 支持,大規(guī)模使用 |
oracle | 支持,大規(guī)模使用 |
sqlserver | 支持 |
postgres | 支持 |
db2 | 支持 |
h2 | 支持 |
derby | 支持 |
sqlite | 支持 |
sybase | 支持 |
使用jdbc的executeBatch 方法,如果數(shù)據(jù)庫為oracle,則無論是否成功更新到數(shù)據(jù),返回值都是-2,而不是真正被sql更新到的記錄數(shù),這是Oracle JDBC Driver的問題,Druid不作特殊處理。
Druid是根據(jù)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 |
https://github.com/alibaba/druid/wiki/怎么保存Druid的監(jiān)控記錄
https://github.com/alibaba/druid/wiki/配置_LogFilter
https://github.com/alibaba/druid/wiki/配置druid內(nèi)置的log實現(xiàn)
使用Druid Spring Boot Starter,文檔地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter#如何配置-filter
先看常見問題#21,如何生成加密后的密碼及秘鑰:我希望加密我的數(shù)據(jù)庫密碼怎么辦?
進行配置
spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=root# 生成的加密后的密碼(原密碼 123456)spring.datasource.password=WVMjPhfXQrIsWRo0/RCqAVvYtTU9WNVToKJohb8AlUmHwnV6vwFL+FM2CNFDMJwGHW1iCmyaUlF+sgvFdogqEA==# 生成的公鑰public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIiwHpFrDijV+GzwRTzWJk8D3j3jFfhsMFJ/7k1NTvBuLgL+TdIHgaMNOIEjHpXzuvX38J3FtOK8hLrySncVGOMCAwEAAQ==# 配置 connection-properties,啟用加密,配置公鑰。spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}# 啟用ConfigFilterspring.datasource.druid.filter.config.enabled=true
加入以下配置:
<!-- 用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用。 --><property name="validationQuery" value="SELECT 1" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="testWhileIdle" value="true" />
出錯的異常信息摘要: Could not open JDBC Connection for transaction; nested exception is ...jdbc4... No operation allowed after connection closed;
聯(lián)系客服