- 配置druid连接池的内置监控统计功能
- 打开监控统计功能
- 配置StatViewServlet
- 监控页面展示
配置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