Druid使用报告
此次灑家是在現有項目上測試druid連接池,從一個開發者的角度體驗druid的集成便利程度/穩定性,以及druid為人稱道的監控功能.
?官方 github 地址:https://github.com/alibaba/druid/wiki/常見問題
廢話不多說,貼上常規集成druid方法,其實很簡單;
第一步:pom中添加druid依賴:?
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.29</version> </dependency>復制代碼第二步:spring配置文件中定義數據源
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><!-- 基本屬性 url、user、password --><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="initialSize" value="5" /><property name="minIdle" value="20" /><property name="maxActive" value="200" /><property name="maxWait" value="60000" /><!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="SELECT 'x'" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="removeAbandoned" value="true" /><property name="removeAbandonedTimeout" value="1800" /><!-- 打開PSCache,并且指定每個連接上PSCache的大小 --><property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize" value="20" /><!-- 配置監控統計攔截的filters --><property name="filters" value="stat" /> </bean>復制代碼第三步:web.xml中添加如下即可實現監控,如果僅僅想使用連接池也可不做這步配置
<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> <!-- druid的Servlet --> <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>復制代碼至此我們已經配置完畢,按理說是可以跑起來的,但我這邊還是出了一些問題,這個后面說,我們先看看成功后的效果:
1.項目成功啟動后,輸入http://ip:端口+/druid/即可進入Druid Web URI Sta頁面
提供了sql監控頁面:
對比一下pg_stat_statements插件監控sql的效果
還有 URl監控頁面
對比灑家自用的monitor訪問日志監控工具效果
druid提供的監控效果如何不言而喻;
2.接下來說說druid的集成難易程度,集成過程中還是遇到一些問題的,對于現成的項目切換成druid連接池甚至還需要改java源碼(如果業務上用到的話)
問題a:若數據庫為鏡像數據庫(比如docker部署的postgres鏡像數據庫),則切換為druid后會報錯無法啟動項目:
若將數據庫改為本地或者云數據庫都可以成功啟動,唯獨使用使用鏡像數據庫會有這個問題(或許是配置的問題?有知道的少俠告知一下)
問題b:對現成項目切換為druid連接池可能產生代碼報錯
總結:
缺點1.對數據庫為鏡像數據庫如docker部署的postgres會報錯服務起不來,看了官網文檔暫時未找到解決辦法?
2.url監控有數據但是統計還差那么一點點細顆粒度比如一般要看特定時間范圍內特定接口的平均/最大最小響應時間這個不明白為啥他沒做全,并且他的數據似乎不能存入數據庫,可以存入日志,我覺得還是直接存入數據庫的好?
3.對于現有的項目從別的連接池遷移到druid連接池可能造成未知報錯,繼而需要改底層業務代碼,對代碼的入侵性還是有一些的 對比:將druid監控拆解開來看,每一項都沒有做到最好,每一項都有對應市面上做得更好的, 如對sql的統計沒有pg_stat_statements(一般運維會裝的獨立的數據庫監控組件)統計的詳細, 對url的監控沒有monitor.jar統計顆粒度細 ?
一句話概括druid提供的監控確實挺方便,能夠滿足簡單需求,適合新項目且監控要求不高的應用場景;如果是現有維護中的項目,或者監控要求較高的項目,druid明顯可以做得更好;
總結
- 上一篇: 基于hi-nginx的web开发(pyt
- 下一篇: 赛力斯、华为合作全新平台首款旗舰车型计划