使用Druid监控SQL

今天把C3P0连接池更换了Druid数据,没有想到Druid监控SQL如此强大,以下是我配置Druid数据源步骤

Druid介绍

Druid是一个JDBC组件库,包括数据库连接池、SQL Parser等组件。DruidDataSource是最好的数据库连接池。

Druild包获取

Maven工程中添加druid依赖包:

		
		
			com.alibaba
			druid
			1.0.26
		

Druid使用

更换sping-jdbc.xml配置把c3po更换Druid数据源

 
	   
	   
	   
	   
	   
	   
	   
	  
	
	   
	  
	
	   
	  
	
	   
	  
	
	  
	
	   
	   
	  
	
	   
	   
	  
	
	  
	  
	  
	  
      
       
 

StatViewServlet配置

Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。

这个StatViewServlet的用途包括:

  • 提供监控信息展示的html页面
  • 提供监控信息的JSON API
  • 提供session信息

需要配置在你web应用中的WEB-INF/web.xml中。 

	
		DruidStatView
		com.alibaba.druid.support.http.StatViewServlet
	
	
		DruidStatView
		/druid/*
	

 配置完之后,可以通过如下格式的地址在浏览器访问查看。

可以通过如下URL访问。(localhost为IP port为8080,kis-ui为项目名称)

http://localhost:8088/kis-ui/druid/index.html  如下图

使用Druid监控SQL_第1张图片

如果想要访问的时候需要验证,则需要提供用户名和密码作为验证呢,而不是直接就能看JDBC执行的状态信息

需要在上述配置的情况下,配置Servlet的 loginUsername 和 loginPassword这两个初始参数。

	
		DruidStatView
		com.alibaba.druid.support.http.StatViewServlet
	    
   		   
    	 loginUsername  
   		 druid  
   	    
        
   	      
    	loginPassword  
    	druid  
        
	
	
		DruidStatView
		/druid/*
	

 配置好之后,登录之后才能访问。

使用Druid监控SQL_第2张图片

如果没有配置StatFilter,那么,我们无法获取相关统计信息。

比如:

无法看到SQL监控TAB上的数据。

使用Druid监控SQL_第3张图片

 如何展示出这些数据呢? 解决的办法就是配置StatFilter。

StatFilter的别名是stat,在spring中使用别名配置方式如下:

使用Druid监控SQL_第4张图片

在URI监控页,可以清楚地看到执行某个动作,关联SQL有多少,请求次数、执行时间、并发数等信息。

StatFilter可以和其他的Filter配置使用,比如, 与log4j组合使用。 

 

使用Druid监控SQL_第5张图片

[INFO ][2016-11-15 20:11:11,677] com.alibaba.druid.pool.DruidDataSourceStatLoggerImpl.log(DruidDataSourceStatLoggerImpl.java:77) - 
{"url":"jdbc:mysql://127.0.0.1:3306/kis-ui?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull","dbType":"mysql","name":"DataSource-958465974","activeCount":0,"poolingCount":1,"connectCount":0,"closeCount":0}

 内置Filter别名和对应的Filter类名如下:

别名 Filter类名
default com.alibaba.druid.filter.stat.StatFilter
stat com.alibaba.druid.filter.stat.StatFilter
mergeStat com.alibaba.druid.filter.stat.MergeStatFilter
encoding com.alibaba.druid.filter.encoding.EncodingConvertFilter
log4j com.alibaba.druid.filter.logging.Log4jFilter
log4j2 com.alibaba.druid.filter.logging.Log4j2Filter
slf4j com.alibaba.druid.filter.logging.Slf4jLogFilter
commonlogging com.alibaba.druid.filter.logging.CommonsLogFilter

慢SQL记录

StatFilter属性slowSqlMillis用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢。slowSqlMillis的缺省值为300,也就是300毫秒。


    
    

显示效果图如下,当执行sql语句超过了300毫秒,执行的

使用Druid监控SQL_第6张图片

 

Wallfilter配置 

配置WallFilter,可以起到拦截作用,从而形成SQL的白名单和黑名单。

缺省情况下,配置装载的目录如下:

数据库类型 目录
mysql META-INF/druid/wall/mysql
oracle META-INF/druid/wall/oracle
sqlserver META-INF/druid/wall/sqlserver
postgres META-INF/druid/wall/postgres

		
		
	
 
	
		
		
	
	
	
    
         
        
        
        
        
        
        
        
    
   
   ...
   
	
		
		    
		    
		      
			
			
			
		
	
 

 配置好Wallfilter, 我们就可以看到SQL防火墙 TAB下的内容了。

使用Druid监控SQL_第7张图片

使用Druid监控SQL_第8张图片

配置Spring和jdbc的关联

最后,还有一个Tab的内容没有展示,那就是Spring监控。

本文在Spring的sping-jdbc.xml配置文件中配置如下信息,支持方法名的拦截。

	
	
 
	
		
			
				com.kis.service.*
				com.demo.action.*
			
		
	
	
		
	

 完工后,我们再去看一下,Spring监控的TAB内容,就可以看到相关的MyBatis Mapper执行信息。

使用Druid监控SQL_第9张图片

 session 信息配置

在web.xml配置,如下代码 sessionStatEnable 默认关闭(官网上好像超过一个session有bug)


    
		DruidStatView
		com.alibaba.druid.support.http.StatViewServlet
		
    
	 
         resetEnable
         false
    
	
		
		loginUsername
		druid
	
	
		
		loginPassword
		druid
	
	
   
	
		DruidStatView
		/druid/*
	
	
	 
    
        org.springframework.web.util.Log4jConfigListener
    
    
    
        DruidWebStatFilter
        com.alibaba.druid.support.http.WebStatFilter
        
            exclusions
            *.js,*.gif,*.jpg,*.png,*.css,*.ico,*.htm,/druid/*
        
		
			principalCookieName
			USER_COOKIE
		
		
        
            sessionStatEnable
            1000
        
        
            profileEnable
            true
        
    
    
    
        DruidWebStatFilter
        /*
    

效果图

使用Druid监控SQL_第10张图片

非常感谢Druid数据

Druid还有很多其他的功能,在这篇文章中就一一展示,有兴趣的朋友可以在Druid的Github网页上查看。 

你可能感兴趣的:(java基础)