最近公司发现代码效率运行很低, 而且经常锁住数据库,意外发现了 druid 这个东西,说实话第一次碰到竟然是为 他的SQLutils,今天再开才发现他正式我想要的数据库sql执行监控工具, 废话不多说了,开始配置,为了能看到效果直接在我现在的项目上改,
druid 提供的文档真好,正式我们能看懂的中文文档:
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
源码: https://github.com/alibaba/druid
在文档中, 说的非常详细, 我按照文档 文档基本半个小时就配置号;
以下是我的配置步骤:
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
现在最新版是 1.0.9
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
druid 是控制sql 所以在数据源这里做了配置, 他们修改了spring的dbcp连接, 可能实在自己的数据源链接中添加了一些监控sql 的脚本
我是通过 bean 的方式配置的 其他配置方式见原网页
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<property name="slowSqlMillis" value="10000" />
<property name="logSlowSql" value="true" />
<property name="mergeSql" value="true" />
</bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
... ...
<property name="filters" value="log4j" />
<property name="proxyFilters">
<list>
<ref bean="stat-filter" />
</list>
</property>
</bean>
<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>
<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.mycompany.service.*</value>
<value>com.mycompany.dao.*</value>
</list>
</property>
</bean>
<aop:config>
<aop:advisor advice-ref="druid-stat-interceptor"
pointcut-ref="druid-stat-pointcut" />
</aop:config>
我们启动我们服务, 我启动过程还是比较顺利的,如果原服务正常启动, 添加了druid出错了, 那就是配置错误了, 按照错误提示一步一步找应该能找到问题所在
看下我启动的效果吧:
输入你的用户名在 地址栏输入:应用地址:端口/web服务/druid
看到效果了, 哈哈, 看下数据源连接吧展示一下部分信息:
我本地只做了一次简单操作,所以数据比较少, 如果放在生产我们就可以看到了, 不会天天被被运维说我的数据链接有问题了
看一下我们最关心的sql吧:
噢 终于出来, 竟然和我 在 执行的是一致的O(∩_∩)O哈哈~ 配置正确,我们看到这里有方法执行时间, 和事物, 我这个方式是一个sevice , 所有的方法竟然都在事物中, 实际上只需要个在事物中即可, 费这么大劲,终于抓到元凶了, 没事干 弄那么多select 放事物做什么,还有就是有一个sql执行时间太长了,我么来分析一下:
如果方法执行太慢这个 sql 绝对是元凶! 要优化就从他入手吧!