项目中使用的数据库连接池是阿里开源的druid连接池,经常会有一些场景需要监控和统计数据源、sql的执行情况,因此引入druid提供的监控druid monitor。

Druid是一个开源项目,源码托管在github上:https://github.com/alibaba/druid Druid 0.1.18之后版本都发布到maven中央仓库中,所以你只需要在项目的pom.xml中加上dependency就可以了。例如:

[html]  view plain copy

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid</artifactId>
  4. <version>${druid-version}</version>
  5. </dependency></span>

也可以选择 Maven仓库查找公共的仓库地址: http://www.mvnrepository.com/artifact/com.alibaba/druid

好了,废话也说了一大堆了。接下来说明一下怎么查看DruidDataSource的监控数据。
对于web项目,使用起来很方便,只需要在web.xml中配置一下DruidStatView就行了。其它的Druid已经帮我们都实现了。

1.Druid Monitor监控Java Web项目

先说明一下数据源的配置情况吧,例:

[html]  view plain copy

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/aop
  10. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  11. http://www.springframework.org/schema/tx
  12. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  13. http://www.springframework.org/schema/context
  14. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  15. <beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"
  16. destroy-method="close">
  17. <!-- 基本属性 url、user、password -->
  18. <propertyname="driverClassName"value="oracle.jdbc.OracleDriver"/>
  19. <propertyname="url"value="jdbc:oracle:thin:@192.168.102.93:1521:mydb1"/>
  20. <propertyname="username"value="my_v31"/>
  21. <propertyname="password"value="my_v31"/>
  22. <!-- 配置初始化大小、最小、最大 -->
  23. <propertyname="initialSize"value="1"/>
  24. <propertyname="minIdle"value="1"/>
  25. <propertyname="maxActive"value="20"/>
  26. <!-- 配置获取连接等待超时的时间 -->
  27. <propertyname="maxWait"value="60000"/>
  28. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  29. <propertyname="timeBetweenEvictionRunsMillis"value="60000"/>
  30. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  31. <propertyname="minEvictableIdleTimeMillis"value="300000"/>
  32. <!--
  33. 用来检测连接是否有效的sql,要求是一个查询语句。
  34. 如果validationQuery为null,testOnBorrow、testOnReturn、
  35. testWhileIdle都不会其作用
  36. -->
  37. <propertyname="validationQuery"value="SELECT 1 FROM DUAL"/>
  38. <propertyname="testWhileIdle"value="true"/>
  39. <propertyname="testOnBorrow"value="false"/>
  40. <propertyname="testOnReturn"value="false"/>
  41. <!--
  42. 打开PSCache,并且指定每个连接上PSCache的大小
  43. 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false
  44. -->
  45. <propertyname="poolPreparedStatements"value="true"/>
  46. <propertyname="maxPoolPreparedStatementPerConnectionSize"value="20"/>
  47. <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
  48. <propertyname="filters"value="stat,wall,log4j"/>
  49. <!--
  50. 如果配置了proxyFilters,此配置可以不配置
  51. druid.stat.mergeSql=true合并执行的相同sql,避免因为参数不同而统计多条sql语句
  52. druid.stat.slowSqlMillis=10000用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢
  53. <propertyname="connectionProperties"value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10000"/>
  54. -->
  55. <!-- 监控统计拦截的filters -->
  56. <!-- 并在filters属性中配置了log4j -->
  57. <propertyname="proxyFilters">
  58. <list>
  59. <refbean="stat-filter"/>
  60. <refbean="log-filter"/>
  61. </list>
  62. </property>
  63. </bean>
  64. <!-- 慢SQL记录-->
  65. <beanid="stat-filter"class="com.alibaba.druid.filter.stat.StatFilter">
  66. <propertyname="mergeSql"value="true"/>
  67. <propertyname="slowSqlMillis"value="10000"/>
  68. <propertyname="logSlowSql"value="true"/>
  69. </bean>
  70. <beanid="log-filter"class="com.alibaba.druid.filter.logging.Log4jFilter">
  71. <!-- <property name="resultSetLogEnabled" value="false" /> -->
  72. <!-- <property name="statementExecutableSqlLogEnable" value="true" /> -->
  73. </bean>
  74. <!-- 配置druid监控spring jdbc -->
  75. <beanid="druid-stat-interceptor"class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"/>
  76. <beanid="druid-stat-pointcut"class="org.springframework.aop.support.JdkRegexpMethodPointcut"scope="prototype">
  77. <propertyname="patterns">
  78. <list>
  79. <value>com.XXX.stat.service.*</value>
  80. <value>com.XXX.stat.dao.*</value>
  81. </list>
  82. </property>
  83. </bean>
  84. <aop:configproxy-target-class="true">
  85. <aop:advisoradvice-ref="druid-stat-interceptor"pointcut-ref="druid-stat-pointcut"/>
  86. </aop:config>
  87. </beans>
尽管Druid已经说明只需要配置数据库中的url地址就可以帮我们自动来匹配driverClassName,但是发现如果不配置这个,日志中总是有一些警告,所以就配置了一下。官网提供了一下他自己的driverClassName有:
[plain]  view plain copy

  1. jdbc:derby:=org.apache.derby.jdbc.EmbeddedDriver
  2. jdbc:mysql:=com.mysql.jdbc.Driver
  3. jdbc:log4jdbc:=net.sf.log4jdbc.DriverSpy
  4. jdbc:oracle:=oracle.jdbc.driver.OracleDriver
  5. jdbc:microsoft:=com.microsoft.jdbc.sqlserver.SQLServerDriver
  6. jdbc:jtds:=net.sourceforge.jtds.jdbc.Driver
  7. jdbc:postgresql:=org.postgresql.Driver
  8. jdbc:fake:=com.alibaba.druid.mock.MockDriver
  9. jdbc:hsqldb:=org.hsqldb.jdbcDriver
  10. jdbc:db2:=COM.ibm.db2.jdbc.app.DB2Driver
  11. jdbc:sqlite:=org.sqlite.JDBC
  12. jdbc:ingres:=com.ingres.jdbc.IngresDriver
  13. jdbc:h2:=org.h2.Driver
  14. jdbc:mckoi:=com.mckoi.JDBCDriver
接下来说一下web.xml中的配置参数都有什么,这里你也可以配置loginUserName和loginPassword,避免所有的人都可以看到你自己的数据库情况。这样子在你登录监控页面的时候就必须输入密码才可以访问了。当然也可以把你的IP加到allow之中,这样就只有你自己的机器可以访问这个监控界面了。例:
[html]  view plain copy

  1. <filter>
  2. <filter-name>DruidWebStatFilter</filter-name>
  3. <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
  4. <init-param>
  5. <!-- 经常需要排除一些不必要的url,比如.js,/jslib/等等。配置在init-param中 -->
  6. <param-name>exclusions</param-name>
  7. <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
  8. </init-param>
  9. <!-- 缺省sessionStatMaxCount是1000个。你可以按需要进行配置 -->
  10. <init-param>
  11. <param-name>sessionStatMaxCount</param-name>
  12. <param-value>1000</param-value>
  13. </init-param>
  14. <!-- druid 0.2.7版本开始支持profile,配置profileEnable能够监控单个url调用的sql列表 -->
  15. <init-param>
  16. <param-name>profileEnable</param-name>
  17. <param-value>true</param-value>
  18. </init-param>
  19. <init-param>
  20. <param-name>principalSessionName</param-name>
  21. <param-value>users.username</param-value>
  22. </init-param>
  23. <!-- 你可以关闭session统计功能
  24. <init-param>
  25. <param-name>sessionStatEnable</param-name>
  26. <param-value>true</param-value>
  27. </init-param>-->
  28. </filter>
  29. <servlet>
  30. <servlet-name>DruidStatView</servlet-name>
  31. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  32. <!--
  33. deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
  34. 如果allow没有配置或者为空,则允许所有访问
  35. -->
  36. <init-param>
  37. <param-name>allow</param-name>
  38. <param-value>128.242.127.1/24,127.0.0.1</param-value>
  39. </init-param>
  40. <init-param>
  41. <param-name>deny</param-name>
  42. <param-value>192.168.1.118</param-value>
  43. </init-param>
  44. <!-- 在StatViewSerlvet输出的html页面中,有一个功能是Reset All,执行这个操作之后,会导致所有计数器清零,重新计数 -->
  45. <spanstyle="white-space:pre"></span><init-param>
  46. <spanstyle="white-space:pre"></span><param-name>resetEnable</param-name>
  47. <spanstyle="white-space:pre"></span><param-value>false</param-value>
  48. <spanstyle="white-space:pre"></span></init-param>
  49. <spanstyle="white-space:pre"></span><!--  用户名和密码 -->
  50. <spanstyle="white-space:pre"></span><init-param>
  51. <param-name>loginUsername</param-name>
  52. <param-value>druid</param-value>
  53. </init-param>
  54. <init-param>
  55. <param-name>loginPassword</param-name>
  56. <param-value>druid</param-value>
  57. </init-param>
  58. </servlet>
  59. <servlet-mapping>
  60. <servlet-name>DruidStatView</servlet-name>
  61. <url-pattern>/druid/*</url-pattern>
  62. </servlet-mapping>

配置好web.xml之后,启动自己的JavaWeb服务,访问一下地址就可以看到Druid的监控界面。我在这里的访问地址是:http://192.168.1.118:8778/druid-monitor/druid/sql.html

输入用户名密码(druid/druid)就可以进入监控页面。

 
2.Druid Monitor监控JavaSE项目
监控javaSE项目可以通过jmx访问远程服务端,也可以通过到服务端运行官网提供的druidStat.sh命令。先说明一下怎么通过Jmx来访问,这一种既方便也不至于登录生产环境的服务器。
首先既然需要使用Jmx来访问,那么服务端就必须提供Jmx的访问端口和IP地址。那么需要在我们的启动文件中增加java的运行参数。需要添加-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname -Dcom.sun.management.jmxremote.port -Dcom.sun.management.jmxremote.authenticate -Dcom.sun.management.jmxremote.ssl参数来暴漏自己的服务器地址。例:linux的运行脚本
[plain]  view plain copy

  1. RESINWEBINF=/home/v31/common-biz
  2. LIBDIRS=${RESINWEBINF}/lib
  3. CP=.:${RESINWEBINF}/resources
  4. for Jars in `ls ${LIBDIRS}`
  5. do
  6. CP=${CP}:${LIBDIRS}/${Jars}
  7. done
  8. java  -Xms2048m -Xmx2048m -cp ${CP}   -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.1.76  -Dcom.sun.management.jmxremote.port=9004  -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false  com.company.main.StartMain  >>logs/error.log 2>&1 &

然后再部署一个web项目来访问这个JMX的IP和端口。启动服务,检查我们的端口是否已经启动
最后在我们本地的web.xml中配置jmxUrl地址来访问就可以查看到数据源的监控数据。例
[html]  view plain copy

  1. <servlet>
  2. <servlet-name>DruidStatView</servlet-name>
  3. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  4. <!-- 远程访问JavaSE项目使用jmx连接 -->
  5. <init-param>
  6. <param-name>jmxUrl</param-name>
  7. <param-value>service:jmx:rmi:///jndi/rmi://192.168.1.76:9004/jmxrmi</param-value>
  8. </init-param>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>DruidStatView</servlet-name>
  12. <url-pattern>/druid/*</url-pattern>
  13. </servlet-mapping>

配置好这些之后访问我们自己的web容器,发现果然可以查看统计信息了。还有人使用jconsole来访问,这个我没有尝试过,因为觉得那个操作对我来说太麻烦了。

3.Druid Monitor监控,使用druidStat.sh

这个命令脚本在git源码的druid\src\main\scripts目录下,
druidStat.bat脚本为:

[plain]  view plain copy

  1. @echo off
  2. rem Copyright 1999-2011 Alibaba Group Holding Ltd.
  3. rem
  4. rem Licensed under the Apache License, Version 2.0 (the "License");
  5. rem you may not use this file except in compliance with the License.
  6. rem You may obtain a copy of the License at
  7. rem
  8. rem      http://www.apache.org/licenses/LICENSE-2.0
  9. rem
  10. rem Unless required by applicable law or agreed to in writing, software
  11. rem distributed under the License is distributed on an "AS IS" BASIS,
  12. rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. rem See the License for the specific language governing permissions and
  14. rem limitations under the License.
  15. set _RUNJAVA="%JAVA_HOME%\bin\java.exe"
  16. set _TOOLSJAR="%JAVA_HOME%\lib\tools.jar"
  17. %_RUNJAVA% -classpath "./druid-0.2.6.jar;%_TOOLSJAR%" com.alibaba.druid.support.console.DruidStat %*

druidStat.sh脚本为:

[plain]  view plain copy

  1. #!/bin/sh
  2. if [ -z "$JAVA_HOME" ] ; then
  3. echo "Error: JAVA_HOME is not defined."
  4. exit 1
  5. fi
  6. "$JAVA_HOME/bin/java" -Dfile.encoding="UTF-8" -cp "./druid-0.2.6.jar:$JAVA_HOME/lib/tools.jar" com.alibaba.druid.support.console.DruidStat  $@
有了这个脚本,我们就可以直接在服务器上运行看到统计信息。这里我只说明一下linux的查看方式。我们修改一下druidStat.sh的druid-0.2.6.jar的目录和名称,然后放到自己的服务器上运行即可。先说明一下命令的使用方法吧。
看到了druidStat.sh的命令帮助,相信大家已经会了一多半了。接下来说明一下怎么使用。直接上图:
如果需要查看某一个ID的具体情况,可以使用-id -detail来查看sql的详情。

druid连接池监控相关推荐

  1. 阿里Druid连接池监控的两个坑

    转载自 注意:阿里Druid连接池监控的两个坑 阿里的Druid大家都知道是最好的连接池,其强大的监控功能是我们追求的重要特性.但在实际情况中也有不少坑,说下最近遇到的一个坑吧! 问题1:不断打印er ...

  2. druid 连接池监控报错 Sorry, you are not permitted to view this page.

    使用Druid连接池的时候,遇到一个奇怪的问题,在本地(localhost)可以直接打开Druid连接池监控,在其他机器上打开会报错: Sorry, you are not permitted to ...

  3. 注意:阿里Druid连接池监控的两个坑

    image 阿里的Druid大家都知道是最好的连接池,其强大的监控功能是我们追求的重要特性.但在实际情况中也有不少坑,说下最近遇到的一个坑吧! 问题1:不断打印error级别的错误日志 session ...

  4. druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库

    一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...

  5. spring配置druid连接池和监控数据库访问性能

    Druid连接池及监控在spring配置如下: [html] view plaincopy <bean id="dataSource" class="com.ali ...

  6. SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面

    一.Druid连接池 1.druid简介 Druid连接池是阿里巴巴开源的数据库连接池项目.Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能.功能强大,能防SQL注入,内置Login ...

  7. Spring学习总结(12)——Druid连接池及监控在spring配置

    Druid连接池及监控在 spring 配置如下: <bean  id="dataSource" class="com.alibaba.druid.pool.Dru ...

  8. Druid连接池开启数据库监控功能

    web程序普遍的都会涉及到数据库的操作,为了提高系统的性能,在数据库操作上,几乎千篇一律的使用了数据库连接池技术,数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀 ...

  9. alibaba的druid连接池的监控的两种方法

    alibaba的druid连接池的监控的两种场景 一.导入druid包,适用spring.springboot 1.导包(版本自选) 这里省略了数据库的其他包只关注druid的相关 <depen ...

最新文章

  1. 《数学之美》第3章 统计语言模型
  2. 期末复习、化学反应工程科目(第八、九章)
  3. 脚本示例 (Reporting Services)Microsoft Visual Basic .NET
  4. html-其他常见标签的使用
  5. (ZT)在日本市场推广 iPhone 应用的经验
  6. 你可能不知道的Spring Boot那点事
  7. 怎样启用win7的超级管理员账户
  8. %3c php $str1=,ThinkPHP5.0.215.1.* 代码执行和命令执行漏洞利用
  9. Umbraco中的Examine Search功能讲解
  10. 25. Magento 创建新闻模块(5)
  11. TypeScript:Web开发
  12. mysql表utf-8 字符串入库编码异常
  13. Reason of Random Initialization - Neural Networks
  14. canvas实现点连线动画
  15. 网络工程师面试真题——ACL与IP Prefix的区别
  16. java实验作业:银行账户
  17. matlab函数anova,MATLAB进行单因素方差分析——ANOVA
  18. 芯盾时代完成3亿元C轮融资,宽带资本领投 1
  19. Roblox剑九之剑二
  20. 数字与英文字母转换matlab,MATLAB编程:数值(0-25)转换成大写英文字母

热门文章

  1. Cell Genomics封面|北大吴华君组利用空间多组学技术解析肿瘤内空间异质性(附招聘)...
  2. ubuntu 下如何下载linux内核源码
  3. 简单好用的录音软件?
  4. CentOS Linux 内核升级
  5. 数据库(一)——数据库的基本使用
  6. Linux cat命令过滤#和空白行
  7. 关于Coursera
  8. 【热门书籍】温度决定生老病死 作者:马悦凌
  9. NoSql的四大类型
  10. day 1 | 704. 二分查找、27. 移除元素