这篇博客就带大家整合druid
其实druid的使用, 在GitHub上非常全,不过还是直接带大家来看看我们项目中具体的使用情况吧:
druid是什么
数据库连接池,能够提供强大的监控和扩展能力, 我们在线上最开始监控sql的时候,就是用druid来看的
由于我们所有项目的一个公共的管理jar的版本的地方:kwy-parent(这里如果忘记结构了,可以回过去看一下这篇博客: SSM从零开始搭框架(一)). 所以需要在这个里面,添加上jar以及jar的版本
<druid.version>1.1.9</druid.version>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
service的pom文件添加内容
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
我们使用spring管理druid,在数据库配置文件中datasource.xml中改成druid,还记得我们的目录结构吗?
附上datasource.xml内容:
注意:要使用监控功能,<property name="filters" value="stat" />filters属性要设置为stat。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--spring用来控制业务逻辑,数据源,事务控制,aop-->
<!--<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<!--基本属性url user password-->
<!--<property name="driverClass" value="${jdbc.driver}"></property>-->
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}"/>
<property name="password" value="${jdbc_password}"/>
<!--配置初始化大小,最大,最小-->
<property name="initialSize" value="${jdbc_initialSize}"/>
<property name="maxActive" value="${jdbc_maxActive}"/>
<property name="minIdle" value="${jdbc_minIdle}"/>
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="${jdbc_maxWait}"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${jdbc_timeBetweenEvictionRunsMillis}"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${jdbc_minEvictableIdleTimeMillis}"/>
<property name="validationQuery" value="${jdbc_validationQuery}"/>
<property name="testWhileIdle" value="${jdbc_testWhileIdle}"/>
<property name="testOnBorrow" value="${jdbc_testOnBorrow}"/>
<property name="testOnReturn" value="${jdbc_testOnReturn}"/>
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<!--poolPreparedStatements.如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。-->
<property name="poolPreparedStatements" value="${jdbc_poolPreparedStatements}"/>
<property name="maxOpenPreparedStatements" value="${jdbc_maxOpenPreparedStatements}"/>
<!--配置监控统计拦截的filters-->
<property name="filters" value="stat"/>
</bean>
<!--spring 事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--开启基于注解的事务-->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
</beans>
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://192.168.22.58:8066/401_itoo?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
jdbc_username=root
jdbc_password=root
jdbc_initialSize=8
jdbc_maxActive=200
jdbc_minIdle=8
jdbc_maxWait=8
jdbc_timeBetweenEvictionRunsMillis=6000
jdbc_minEvictableIdleTimeMillis=300000
jdbc_validationQuery=select 'x'
jdbc_testWhileIdle=true
jdbc_testOnBorrow=true
jdbc_testOnReturn=true
jdbc_poolPreparedStatements=true
jdbc_maxOpenPreparedStatements=20
有些可能你会说:都是采取的默认的,还干嘛非要写出来,我觉得好处是这样的: 如果哪天它默认的修改了,如果我们确定了每个值,不会受到其依赖jar包修改而受到影响.
1.使用起步
首先是过滤器filter的配置,在web.xml添加如下配置
1>WebStatFilter用于采集web-jdbc关联监控的数据。
2>exclusions:排除一些不必要的url,如:js等
3>sessionStatMaxCount,缺省值是1000个
4>session统计功能
5>principalSessionName:使druid能够知道当前的session用户是谁
6>profileEnable 能监控单个url调用的sql列表
<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,*.jsp,/druid/*,/download/*</param-value>
</init-param>
<init-param>
<param-name>sessionStatMaxCount</param-name>
<param-value>2000</param-value>
</init-param>
<init-param>
<param-name>sessionStatEnable</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>principalSessionName</param-name>
<param-value>session_user_key</param-value>
</init-param>
<init-param>
<param-name>profileEnable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这是最简单的选项配置,选项配置结束后,是监控界面的路径配置了,servlet配置我们将在哪里打开我们的监控页面一级打开页面的时候,输出用户名和密码,在web.xml中添加如下代码:
<!-- 配置 Druid 监控信息显示页面 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 允许清空统计数据 -->
<param-name>resetEnable</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- 用户名 -->
<param-name>loginUsername</param-name>
<param-value>dmsd</param-value>
</init-param>
<init-param>
<!-- 密码 -->
<param-name>loginPassword</param-name>
<param-value>druid6688</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
访问service启动地址, url后面添加druid/sql.html,即可看到druid登录页面,将上面的用户名密码登录,就看到监控页面了.
![](https://i-blog.csdnimg.cn/blog_migrate/07a113ea7dfa7bcc2dd578ec8d5a9d2a.png)
datasource.xml中添加:
<!-- Druid AOP监控service执行时间 start-->
<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.tgb.kwy.dubbo.service.*</value>//这里想加其他的,可以继续以value这种格式写
</list>
</property>
</bean>
<aop:config>
<aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
</aop:config>
<!-- Druid AOP监控service执行时间 end-->
重新启动项目,我们可以看到spring监控里面有东西了
附上官方文档:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
大家具体一些需要的内容,还是看这个吧~