alibaba-Druid的使用和配置
Druid號稱是Java語言中最好的資料庫連線池。
1) 可以監控資料庫訪問效能,Druid內建提供了一個功能強大的StatFilter外掛,能夠詳細統計SQL的執行效能,這對於線上分析資料庫訪問效能有幫助。
2) 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴充套件性好的資料庫連線池。
3) 資料庫密碼加密。直接把資料庫密碼寫在配置檔案中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支援PasswordCallback。
4) SQL執行日誌,Druid提供了不同的LogFilter,能夠支援Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。
5) 能夠提供基於Filter-Chain模式的外掛體系。
下面介紹下如何在專案中整合Druid:
1、maven依賴
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid-version}</version>
- </dependency>
2、配置web.xml
- <!-- druid -->
- <servlet>
- <servlet-name>DruidStatView</servlet-name>
- <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>DruidStatView</servlet-name>
- <url-pattern>/druid/*</url-pattern>
- </servlet-mapping>
- <filter>
- <filter-name>DruidWebStatFilter</filter-name>
- <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
- <init-param>
- <param-name>exclusions</param-name>
- <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>DruidWebStatFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
3、spring.xml中配置druid資料來源
- <!-- 資料來源druid -->
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
- init-method="init" destroy-method="close">
- <property name="driverClassName" value="${jdbc.driverClassName}" />
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
- <!-- 配置初始化大小、最小、最大 -->
- <property name="initialSize" value="${druid.pool.size.init}" />
- <property name="minIdle" value="${druid.pool.size.min}" />
- <property name="maxActive" value="${druid.pool.size.max}" />
- <!-- 配置監控統計攔截的filters,去掉後監控介面sql無法統計 -->
- <property name="filters" value="stat" />
- </bean>
Druid常見問題:
1、怎麼開啟Druid的監控統計功能
Druid的監控統計功能是通過filter-chain擴充套件實現,如果你要開啟監控統計功能,配置StatFilter。
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
2、怎樣使用Druid的內建監控頁面
內建監控頁面是一個Servlet。
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE
3、內建監控中的Web和Spring關聯監控怎麼配置?
Web關聯監控配置
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter
Spring關聯監控配置
4、怎麼配置防禦SQL隱碼攻擊
Druid提供了WallFilter,它是基於SQL語義分析來實現防禦SQL隱碼攻擊的。
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter
5、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
6、我想日誌記錄JDBC執行的SQL,如何配置
Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter。
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter
7、我的程式可能產生連線洩漏了,有什麼辦法?
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
8、在Druid中使用PSCache會有記憶體佔用過大問題麼?
連線Oracle資料庫,開啟PSCache,在其他的資料庫連線池都會存在記憶體佔用過多的問題,Druid是唯一解決這個問題的連線池。
9、有沒有和其他資料庫連線池的對比?
10、從其他連線池遷移要注意什麼?
不同連線池的引數參照對比:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=6947005
DBCP遷移 https://github.com/alibaba/druid/wiki/DBCP%E8%BF%81%E7%A7%BB
11、Druid中有沒有類似Jboss DataSource中的ExceptionSorter
ExceptionSorter是JBoss DataSource中的優秀特性,Druid也有一樣功能的ExceptionSorter,但不用手動配置,自動識別生效的。
具體看這裡:http://code.alibabatech.com/wiki/display/Druid/ExceptionSorter
12、Druid中的maxIdle為什麼是沒用的?
maxIdle是Druid為了方便DBCP使用者遷移而增加的,maxIdle是一個混亂的概念。連線池只應該有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分別相當於maxPoolSize和minPoolSize。
13、我的應用配置的是JNDI資料來源,可以用DruidDataSource麼?
DruidDataSource支援JNDI配置,具體看這裡:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_JNDI_Tomcat
具體實現的類是這個:com.alibaba.druid.pool.DruidDataSourceFactory,你可以閱讀程式碼加深理解。
14、我的應用已使用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,只能夠通過這種方法來更換。
15、有一些SQL執行很慢,我希望日誌記錄下來,怎麼設定?
在StatFilter配置中有慢SQL執行日誌記錄。
看這裡 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
16、我希望加密我的資料庫密碼怎麼辦?
運維和DBA都不希望把密碼明文直接寫在配置檔案中,Druid提供了資料庫祕密加密的功能。
具體看這裡:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
17、如果DruidDataSource在init的時候失敗了,不再使用,是否需要close
是的,如果DruidDataSource不再使用,必須呼叫close來釋放資源,釋放的資源包括關閉Create和Destory執行緒。
18、DruidDataSource支援哪些資料庫?
理論上說,支援所有有jdbc驅動的資料庫。
19、Oracle下jdbc executeBatch時,更新行數計算不正確
使用jdbc的executeBatch 方法,如果資料庫為oracle,則無論是否成功更新到資料,返回值都是-2,而不是真正被sql更新到的記錄數,這是Oracle JDBC Driver的問題,Druid不作特殊處理。
20、Druid如何自動根據URL自動識別DriverClass的
Druid是根據url字首來識別DriverClass的,這樣使得配置更方便簡潔。
21、如何儲存監控記錄
22、我想Log輸出SQL執行的資訊怎麼辦?
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter
23、如何配置Druid內建的log實現
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AEdruid%E5%86%85%E7%BD%AE%E7%9A%84log
以上內容轉自 http://wosyingjun.iteye.com/blog/2306139
專案例子:https://github.com/lkj41110/beauty_ssm
相關文章
- NGINX的配置和基本使用Nginx
- Jetty的安裝、配置和使用Jetty
- Git命令的使用和相關配置Git
- 【Spark篇】---SparkSQL on Hive的配置和使用SparkSQLHive
- Oracle Stream的安裝、配置和使用Oracle
- Linux Vim編輯的的配置和使用Linux
- windows解壓版mysql的配置和使用WindowsMySql
- Oracle PGA記憶體的配置和使用Oracle記憶體
- Quill基本使用和配置 - DevUIUIdev
- tmux的使用方法和個性化配置UX
- HBase的安裝配置和使用Java連線Java
- AIX中YUM庫的配置和使用方法AI
- DBCP 資料連線池的配置和使用
- Sqoop1.4.6配置和使用OOP
- Vim配置、外掛和使用技巧
- Struts 驗證框架 配置和使用框架
- VisualSVN Server的配置和使用方法 圖文Server
- windows環境下go module的使用和goland配置WindowsGoLand
- 康過來!Nacos配置和管理微服務的使用微服務
- Spring Task定時任務的配置和使用Spring
- 04.多版本Python共存的配置和使用Python
- 混合使用TFVC和GIT配置庫的優化方案Git優化
- 使用libvirt配置pci bus的numa親和性
- /bin/bash 和 /bin/ksh使用的使用者配置檔案的比較
- 最快的遠端控制軟體radmin的配置和使用
- ubuntu 下面 svn 伺服器端和客戶端的配置和使用Ubuntu伺服器客戶端
- 記憶體的配置和使用——效能調整手冊和參考記憶體
- 圖片載入外掛imagesLoaded的配置和使用
- vue 2.0開發專案中stylus 的配置和使用Vue
- ubuntu系統共享桌面的使用和配置Ubuntu
- 在IDEA裡gradle配置和使用IdeaGradle
- thinkphp下配置和使用阿里雲redisPHP阿里Redis
- 在Linux中,如何配置和使用Xen?Linux
- Springboot非同步事件配置和使用Spring Boot非同步事件
- Git修改和配置使用者名稱和郵箱Git
- 【Services】Oracle 11g RAC使用Manual和Policy Managed方法配置和使用ServicesOracle
- 配置samba的訪問密碼和使用者名稱Samba密碼
- Postfix Dovecot SASL和虛擬使用者的原理與配置