配置druid連接池的內置監控統計功能
打開監控統計功能
Druid的監控統計功能是通過filter-chain擴展實現,如果你要打開監控統計功能,配置StatFilter,具體如下所示
<!-- 數據庫連接 -->
<bean id="dataBasePasswordCallback" class="com.haiyoung.util.DataBasePasswordCallback"/>
<bean id="dataSource_pyxis" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close" init-method="init" lazy-init="true">
<!-- 基本屬性 url、user、password -->
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="connectionProperties"
value="......"/>
<property name="passwordCallback" ref="dataBasePasswordCallback"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${db.initialSize}"/>
<property name="minIdle" value="${db.minIdle}"/>
<property name="maxActive" value="${db.maxActive}"/>
<!-- 配置獲取連接等待超時的時間,單位是毫秒 -->
<property name="maxWait" value="${db.maxWait}"/>
<!-- 要啓用PSCache,必須配置大於0,當大於0時,poolPreparedStatements自動觸發修改爲true -->
<property name="maxPoolPreparedStatementPerConnectionSize" value="${db.maxPoolPreparedStatementPerConnectionSize}"/>
<!-- 配置間隔多久才進行一次檢測(啓動destroy線程),檢測需要關閉的空閒連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}"/>
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒;即最多允許一個連接空閒多長時間,超出此時間的連接,會被destroy線程關閉 -->
<property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}"/>
<!-- 對空閒接連再被使用時,如果空閒時間超過timeBetweenEvictionRunsMillis,會發出驗證sql進行有效檢測 -->
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<property name="validationQuery" value="${db.validationQuery}"/>
<!-- 移除執行超時的sql,單位是秒 -->
<property name="removeAbandoned" value="${db.removeAbandoned}"/>
<property name="removeAbandonedTimeout" value="${db.removeAbandonedTimeout}"/>
<property name="logAbandoned" value="true"/>
<!-- 配置監控統計攔截的filters
Druid的監控統計功能是通過filter-chain擴展實現,如果你要打開監控統計功能,配置StatFilter,具體看這裏
-->
<property name="proxyFilters">
<list>
<ref bean="druid_stat_filter"/>
<ref bean="druid_wall_filter"/>
<ref bean="druid_log_filter"/>
</list>
</property>
</bean>
<bean class="com.alibaba.druid.filter.stat.StatFilter" id="druid_stat_filter">
<!-- 慢sql規則,單位毫秒 -->
<property name="slowSqlMillis" value="10000"/>
<!-- 記錄慢sql到日誌 -->
<property name="logSlowSql" value="true"/>
<!-- 統計時合併相似sql -->
<property name="mergeSql" value="true"/>
</bean>
<!-- sql防禦 -->
<bean class="com.alibaba.druid.wall.WallFilter" id="druid_wall_filter">
<!-- 記錄違反規則的sql到日誌 -->
<property name="logViolation" value="true"/>
</bean>
<bean class="com.alibaba.druid.filter.logging.Slf4jLogFilter" id="druid_log_filter">
<!-- 記錄真正執行的語句,即參數已注入的sql -->
<property name="statementExecutableSqlLogEnable" value="true"/>
<!-- 其它配置 -->
<property name="statementCreateAfterLogEnabled" value="false"/>
<property name="statementPrepareAfterLogEnabled" value="false"/>
<property name="statementParameterSetLogEnabled" value="false"/>
<property name="statementCloseAfterLogEnabled" value="false"/>
<property name="resultSetCloseAfterLogEnabled" value="false"/>
</bean>
配置StatViewServlet
Druid內置提供了一個StatViewServlet用於展示Druid的統計信息。
這個StatViewServlet的用途包括:
- 提供監控信息展示的html頁面
- 提供監控信息的JSON API
StatViewServlet是一個標準的javax.servlet.http.HttpServlet,需要配置在你web應用中的WEB-INF/web.xml中。
具體配置如下所示:
<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>
根據配置中的url-pattern來訪問內置監控頁面,如果是上面的配置,內置監控頁面的首頁是/druid/index.html
http://ip:port/context-name/druid/index.html
監控頁面展示
- 數據源列表
- SQL監控
druid監控功能很豐富,可以通過配置開啓,官網wiki有詳細介紹
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98