Druid使用报告
此次灑家是在現(xiàn)有項目上測試druid連接池,從一個開發(fā)者的角度體驗druid的集成便利程度/穩(wěn)定性,以及druid為人稱道的監(jiān)控功能.
?官方 github 地址:https://github.com/alibaba/druid/wiki/常見問題
廢話不多說,貼上常規(guī)集成druid方法,其實很簡單;
第一步:pom中添加druid依賴:?
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.29</version> </dependency>復制代碼第二步:spring配置文件中定義數(shù)據(jù)源
<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" /><!-- 配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 --><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" /><!-- 配置監(jiān)控統(tǒng)計攔截的filters --><property name="filters" value="stat" /> </bean>復制代碼第三步:web.xml中添加如下即可實現(xiàn)監(jiān)控,如果僅僅想使用連接池也可不做這步配置
<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>復制代碼至此我們已經(jīng)配置完畢,按理說是可以跑起來的,但我這邊還是出了一些問題,這個后面說,我們先看看成功后的效果:
1.項目成功啟動后,輸入http://ip:端口+/druid/即可進入Druid Web URI Sta頁面
提供了sql監(jiān)控頁面:
對比一下pg_stat_statements插件監(jiān)控sql的效果
還有 URl監(jiān)控頁面
對比灑家自用的monitor訪問日志監(jiān)控工具效果
druid提供的監(jiān)控效果如何不言而喻;
2.接下來說說druid的集成難易程度,集成過程中還是遇到一些問題的,對于現(xiàn)成的項目切換成druid連接池甚至還需要改java源碼(如果業(yè)務(wù)上用到的話)
問題a:若數(shù)據(jù)庫為鏡像數(shù)據(jù)庫(比如docker部署的postgres鏡像數(shù)據(jù)庫),則切換為druid后會報錯無法啟動項目:
若將數(shù)據(jù)庫改為本地或者云數(shù)據(jù)庫都可以成功啟動,唯獨使用使用鏡像數(shù)據(jù)庫會有這個問題(或許是配置的問題?有知道的少俠告知一下)
問題b:對現(xiàn)成項目切換為druid連接池可能產(chǎn)生代碼報錯
總結(jié):
缺點1.對數(shù)據(jù)庫為鏡像數(shù)據(jù)庫如docker部署的postgres會報錯服務(wù)起不來,看了官網(wǎng)文檔暫時未找到解決辦法?
2.url監(jiān)控有數(shù)據(jù)但是統(tǒng)計還差那么一點點細顆粒度比如一般要看特定時間范圍內(nèi)特定接口的平均/最大最小響應(yīng)時間這個不明白為啥他沒做全,并且他的數(shù)據(jù)似乎不能存入數(shù)據(jù)庫,可以存入日志,我覺得還是直接存入數(shù)據(jù)庫的好?
3.對于現(xiàn)有的項目從別的連接池遷移到druid連接池可能造成未知報錯,繼而需要改底層業(yè)務(wù)代碼,對代碼的入侵性還是有一些的 對比:將druid監(jiān)控拆解開來看,每一項都沒有做到最好,每一項都有對應(yīng)市面上做得更好的, 如對sql的統(tǒng)計沒有pg_stat_statements(一般運維會裝的獨立的數(shù)據(jù)庫監(jiān)控組件)統(tǒng)計的詳細, 對url的監(jiān)控沒有monitor.jar統(tǒng)計顆粒度細 ?
一句話概括druid提供的監(jiān)控確實挺方便,能夠滿足簡單需求,適合新項目且監(jiān)控要求不高的應(yīng)用場景;如果是現(xiàn)有維護中的項目,或者監(jiān)控要求較高的項目,druid明顯可以做得更好;
總結(jié)
- 上一篇: 基于hi-nginx的web开发(pyt
- 下一篇: Codepen 每日精选(2018-3-