Druid Monitor监控Java Web项目

来源:互联网 发布:淘宝网是怎么开的 编辑:程序博客网 时间:2024/05/16 06:28

Druid正式版本下载地址:http://repo1.maven.org/maven2/com/alibaba/druid/
Druid是一个开源项目,源码托管在github上:https://github.com/alibaba/druid
Druid 0.1.18之后版本都发布到maven中央仓库,你只需要在项目的pom.xml中加上dependency就可以了 

下面就开始相关的配置

第一步:在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>  

第二步:对数据源的配置

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="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.       
  16.       
  17.     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"  
  18.         destroy-method="close">  
  19.            
  20.         <!-- 基本属性 url、user、password -->  
  21.         <property name="driverClassName" value="oracle.jdbc.OracleDriver" />  
  22.         <property name="url" value="jdbc:oracle:thin:@192.168.102.93:1521:mydb1" />  
  23.         <property name="username" value="my_v31" />  
  24.         <property name="password" value="my_v31" />  
  25.       
  26.         <!-- 配置初始化大小、最小、最大 -->  
  27.         <property name="initialSize" value="1" />  
  28.         <property name="minIdle" value="1" />  
  29.         <property name="maxActive" value="20" />  
  30.       
  31.         <!-- 配置获取连接等待超时的时间 -->  
  32.         <property name="maxWait" value="60000" />  
  33.       
  34.         <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
  35.         <property name="timeBetweenEvictionRunsMillis" value="60000" />  
  36.       
  37.         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
  38.         <property name="minEvictableIdleTimeMillis" value="300000" />  
  39.           
  40.         <!--   
  41.             用来检测连接是否有效的sql,要求是一个查询语句。  
  42.             如果validationQuery为null,testOnBorrow、testOnReturn、  
  43.             testWhileIdle都不会其作用   
  44.         -->  
  45.         <property name="validationQuery" value="SELECT 1 FROM DUAL" />  
  46.         <property name="testWhileIdle" value="true" />  
  47.         <property name="testOnBorrow" value="false" />  
  48.         <property name="testOnReturn" value="false" />  
  49.       
  50.         <!--   
  51.             打开PSCache,并且指定每个连接上PSCache的大小   
  52.             如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false  
  53.         -->  
  54.         <property name="poolPreparedStatements" value="true" />  
  55.         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />  
  56.       
  57.         <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->  
  58.         <property name="filters" value="stat,wall,log4j" />  
  59.           
  60.         <!--   
  61.             如果配置了proxyFilters,此配置可以不配置  
  62.             druid.stat.mergeSql=true 合并执行的相同sql,避免因为参数不同而统计多条sql语句  
  63.             druid.stat.slowSqlMillis=10000 用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢  
  64.               
  65.         <property name="connectionProperties" value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10000" />  
  66.          -->  
  67.            
  68.         <!-- 监控统计拦截的filters -->  
  69.         <!-- 并在filters属性中配置了log4j -->  
  70.         <property name="proxyFilters">  
  71.             <list>  
  72.                 <ref bean="stat-filter" />  
  73.                 <ref bean="log-filter" />  
  74.             </list>  
  75.         </property>  
  76.     </bean>  
  77.       
  78.     <!-- 慢SQL记录-->  
  79.     <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">  
  80.         <property name="mergeSql" value="true" />  
  81.         <property name="slowSqlMillis" value="10000" />  
  82.         <property name="logSlowSql" value="true" />  
  83.     </bean>  
  84.       
  85.     <bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">  
  86.         <!-- <property name="resultSetLogEnabled" value="false" /> -->  
  87.         <!-- <property name="statementExecutableSqlLogEnable" value="true" /> -->  
  88.     </bean>  
  89.       
  90.     <!-- 配置druid监控spring jdbc -->  
  91.     <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor" />  
  92.    
  93.     <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">  
  94.         <property name="patterns">  
  95.             <list>  
  96.                 <value>com.XXX.stat.service.*</value>  
  97.                 <value>com.XXX.stat.dao.*</value>  
  98.             </list>  
  99.         </property>  
  100.     </bean>  
  101.       
  102.     <aop:config proxy-target-class="true">  
  103.         <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />  
  104.     </aop:config>  
  105. </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中的配置参数
[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.        
  30.     <servlet>  
  31.         <servlet-name>DruidStatView</servlet-name>  
  32.         <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>  
  33.         <!--   
  34.             deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。  
  35.             如果allow没有配置或者为空,则允许所有访问  
  36.          -->  
  37.         <init-param>  
  38.             <param-name>allow</param-name>  
  39.             <param-value>128.242.127.1/24,127.0.0.1</param-value>  
  40.         </init-param>  
  41.         <init-param>  
  42.             <param-name>deny</param-name>  
  43.             <param-value>192.168.0.127</param-value>  
  44.         </init-param>  
  45.         <!-- 在StatViewSerlvet输出的html页面中,有一个功能是Reset All,执行这个操作之后,会导致所有计数器清零,重新计数 -->  
  46.        <span style="white-space:pre"> </span><init-param>  
  47.        <span style="white-space:pre">    </span><param-name>resetEnable</param-name>  
  48.        <span style="white-space:pre">    </span><param-value>false</param-value>  
  49.         <span style="white-space:pre">    </span></init-param>  
  50.         <span style="white-space:pre">    </span><!--  用户名和密码 -->  
  51.         <span style="white-space:pre">    </span><init-param>  
  52.             <param-name>loginUsername</param-name>  
  53.             <param-value>druid</param-value>  
  54.         </init-param>  
  55.         <init-param>  
  56.             <param-name>loginPassword</param-name>  
  57.             <param-value>druid</param-value>  
  58.         </init-param>  
  59.     </servlet>  
  60.     <servlet-mapping>  
  61.         <servlet-name>DruidStatView</servlet-name>  
  62.         <url-pattern>/druid/*</url-pattern>  
  63.     </servlet-mapping>  
第五步:配置好web.xml之后,启动自己的Web服务,访问一下地址就可以看到Druid的监控界面。我在这里的访问地址是:http://192.168.0.127:8080/server/druid/login.html
   
输入用户名密码(druid/druid)就可以进入监控页面。