1.启用Druid连接池
1.基于Maven配置如下(Gradle类似),pom.xml引入如下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
2.配置数据库连接
<!-- 配置数据源 Druid -->
<bean id="dataSource" class="com.lianqian.urs.util.UrsDruidDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="filters" value="wall,stat"/>
<property name="proxyFilters">
<list>
<ref bean="stat-filter"/>
<ref bean="log-filter"/>
</list>
</property>
<property name="url" value="${jdbc.jdbcUrl}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="${jdbc.initialSize.main}"/>
<property name="maxActive" value="${jdbc.maxActive.main}"/>
<property name="minIdle" value="${jdbc.minIdle.main}"/>
<property name="maxWait" value="${jdbc.maxWait.main}"/>
</bean>
其中,UrsDruidDataSource是我们自定义的类继承自com.alibaba.druid.pool.DruidDataSource。也可以直接填入,继承类主要是完成一些数据库连接的加密等操作。
2.启用Druid监控功能
配置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>
<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>
配置完成后,即可访问。启动web服务器,在浏览器中访问:http://你的服务器ip地址:端口/druid/index.html
3.开启Druid防火墙
配置spring的xml文件,参考1.2,已经添加
<property name="filters" value="wall,stat"/>
此时就可以看到SQL防火墙界面可以查看到表的拦截相关信息
4.开启慢sql监控
<!-- 慢SQL记录 -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<!-- 慢sql时间设置,即执行时间大于200毫秒的都是慢sql -->
<property name="slowSqlMillis" value="200"/>
<property name="logSlowSql" value="true"/>
</bean>
<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
<property name="dataSourceLogEnabled" value="true" />
<property name="statementExecutableSqlLogEnable" value="true" />
</bean>
配置logger4j的输出目录,可以输出慢sql的日志。
# Druid
log4j.logger.druid.sql=WARN,druid
log4j.logger.druid.sql.DataSource=WARN,druid
log4j.logger.druid.sql.Connection=WARN,druid
log4j.logger.druid.sql.Statement=WARN,druid
log4j.appender.druid=org.apache.log4j.DailyRollingFileAppender
log4j.appender.druid.layout=org.apache.log4j.PatternLayout
log4j.appender.druid.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.druid.datePattern='.'yyyy-MM-dd
log4j.appender.druid.Threshold = WARN
log4j.appender.druid.append=true
log4j.appender.druid.File=${catalina.home}/logs/debt-collection/druid-slow-sql.log
5.启用AOP拦截功能
可以按照类型,方法名拦截,我们选择按方法名拦截。先引入aop配置,在Spring的头里面配置增加如下
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
再启用AOP拦截
<bean id="druid-stat-interceptor"
class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
</bean>
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
scope="prototype">
<property name="patterns">
<list>
<value>com.lianqian.urs.business.service.*</value>
<value>com.lianqian.urs.business.dao.*</value>
<value>com.lianqian.urs.controller.*</value>
</list>
</property>
</bean>
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="druid-stat-interceptor"
pointcut-ref="druid-stat-pointcut" />
</aop:config>
proxy-target-class="true"
这个配置如果不加上,会导致注入失败,因为Spring框架的AOP默认是采用JDK动态代理模式,
CGLIB是针对类实现代理,因为这些Controller和Service,DAO层很多方法都不是实现父接口的,所以需要加上,否则会报错
此时重启服务器就可以看到某个方法执行次数以及时间等等。
服务器的访问地址是
http://localhost:8080/druid/index.html
需要配置监控登录密码的,参考
为Druid监控配置访问权限(配置访问监控信息的用户与密码)
参考阿里官方文档:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98