这篇博客就带大家整合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登录页面,将上面的用户名密码登录,就看到监控页面了.
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
大家具体一些需要的内容,还是看这个吧~