springboot项目中实现访问druid内置监控页面


1、首先加入druid依赖

1
2
3
4
5
< dependency >
     < groupId >com.alibaba</ groupId >
     < artifactId >druid-spring-boot-starter</ artifactId >
     < version >1.1.9</ version >
</ dependency >

2、设置配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 数据库访问配置
# 主数据源,默认的
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver- class -name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql: //localhost:3306/test
spring.datasource.username=root
spring.datasource.password= 123456
  
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.initialSize= 5
spring.datasource.minIdle= 5
spring.datasource.maxActive= 20
# 配置获取连接等待超时的时间
spring.datasource.maxWait= 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis= 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis= 300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle= true
spring.datasource.testOnBorrow= false
spring.datasource.testOnReturn= false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements= true
spring.datasource.maxPoolPreparedStatementPerConnectionSize= 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计, 'wall' 用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql= true ;druid.stat.slowSqlMillis= 5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat= true

3、启动项目后

访问页面http://127.0.0.1:8001/druid/sql.html,就可以访问监控页面了,其中ip和端口号为项目的ip和端口号。

页面效果如下:

 

 

 

4、设置druid访问页面的用户名和密码

只需要在springboot启动类中加入@bean配置即可:

1
2
3
4
5
6
7
8
9
10
@Bean
public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {
     ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>( new StatViewServlet(),  "/druid/*" );
     registrationBean.addInitParameter( "allow" , "127.0.0.1" ); // IP白名单 (没有配置或者为空,则允许所有访问)
     registrationBean.addInitParameter( "deny" , "" ); // IP黑名单 (存在共同时,deny优先于allow)
     registrationBean.addInitParameter( "loginUsername" , "root" );
     registrationBean.addInitParameter( "loginPassword" , "1234" );
     registrationBean.addInitParameter( "resetEnable" , "false" );
     return registrationBean;
}

 

 

druid监控页面的配置和使用

Druid运用背景

Druid是由阿里巴巴团队开发的,能够提供强大的监控和扩展功能的数据库连接池。github地址

本项目的项目框架为SpringBoot+Mybatis+Security,并将druid到项目中,作为一个辅助工具帮助提升项目的性能。

Druid配置

1、设置项目依赖

1
2
3
4
5
< dependency >
  < groupId >com.alibaba</ groupId >
      < artifactId >druid-spring-boot-starter</ artifactId >
      < version >1.1.10</ version >
  </ dependency >

2、application.yml中配置Druid数据源,并设置监控参数。YAML文件格式化校验(https://old.qqe2.com/jsontool/yaml.php)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
spring:
     #####DruidDataSource配置#####################
     type: com.alibaba.druid.pool.DruidDataSource
     initialSize: 5
     minIdle: 5
     maxActive: 20
     # 配置获取连接等待超时的时间
     maxWait: 60000
     # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
     timeBetweenEvictionRunsMillis: 60000
     # 配置一个连接在池中最小生存的时间,单位是毫秒
     minEvictableIdleTimeMillis: 300000
     validationQuery: SELECT 1 FROM DUAL
     testWhileIdle: true
     testOnBorrow: false
     testOnReturn: false
     # 打开PSCache,并且指定每个连接上PSCache的大小
     poolPreparedStatements: true
     maxPoolPreparedStatementPerConnectionSize: 20
     # 配置监控统计拦截的filters,去掉后监控界面sql无法统计, 'wall' 用于防火墙
     filters: stat,wall,slf4j
     # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
     connectionProperties: druid.stat.mergeSql= true ;druid.stat.slowSqlMillis= 5000
     #合并多个DruidDataSource的监控数据
     useGlobalDataSourceStat: true

3、设置druid访问页面的用户名和密码,只需要在springboot启动类中加入@bean配置即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**                                                                                                           
  * @description 注册一个StatViewServlet,进行druid监控页面配置                                                              
  * @return servlet registration bean                                                                          
  */                                                                                                           
@Bean                                                                                                         
public ServletRegistrationBean druidStatViewServlet() {
    //先配置管理后台的servLet,访问的入口为/druid/                                                      
     ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(                            
            new StatViewServlet(), "/druid/*" );
     // IP白名单 (没有配置或者为空,则允许所有访问)
     servletRegistrationBean.addInitParameter( "allow" , "127.0.0.1" );
     // IP黑名单 (存在共同时,deny优先于allow)                                                     
  servletRegistrationBean.addInitParameter( "deny" , "" );          
     servletRegistrationBean.addInitParameter( "loginUsername" , "admin" );                                       
     servletRegistrationBean.addInitParameter( "loginPassword" , "sdb3309" );                                     
     servletRegistrationBean.addInitParameter( "resetEnable" , "false" );                                         
     return servletRegistrationBean;                                                                           
}

4、注册一个过滤器,允许Druid监控页面的正常浏览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**                                                                                                                     
  * @description 注册一个过滤器,允许页面正常浏览                                                                  
  * @return filter registration bean                                                                                     
  */                                                                                                                     
@Bean                                                                                                                   
public FilterRegistrationBean druidStatFilter(){                                                                        
     FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(                                         
             new WebStatFilter());                                                                                       
     // 添加过滤规则.                                                                                                          
     filterRegistrationBean.addUrlPatterns( "/*" );                                                                        
     // 添加不需要忽略的格式信息.                                                                                                    
     filterRegistrationBean.addInitParameter( "exclusions" , "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" );               
     return filterRegistrationBean;                                                                                      
}

5、启动项目后,访问页面http://ip:port/druid/sql.html(其中ip和端口号为项目的ip和端口号),使用配置的用户名与密码登录,就可以访问监控页面了。

 

 

 

Druid详细配置

开启慢sql监控

SQL监控中,有一项关于sql执行最慢执行时间的统计,但是只有一个值,就是一条sql语句最慢的执行时间记录,其他执行时间是看不到的,只能通过总时间来进行粗略的估计;一旦项目重启,这些记录就全部消失,因此需要制定相应的日志输出策略。

具体步骤:

1、配置慢sql及日志拦截器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**                         
  * @description 配置慢sql拦截器       
  * @return                  
  */                         
  @Bean (name = "statFilter" )                                                
  public StatFilter statFilter(){                                           
      StatFilter statFilter = new StatFilter();                             
      //慢sql时间设置,即执行时间大于200毫秒的都是慢sql                                        
      statFilter.setSlowSqlMillis( 30 );                                      
      statFilter.setLogSlowSql( true );
      statFilter.setMergeSql( true );                                       
      return statFilter;                                                    
  }                                                                         
   /**                         
  * @description 配置日志拦截器       
  * @return                  
  */                                                                        
  @Bean (name = "logFilter" )                                                 
  public Slf4jLogFilter logFilter(){                                        
      Slf4jLogFilter slf4jLogFilter = new Slf4jLogFilter();                 
      slf4jLogFilter.setDataSourceLogEnabled( true );                         
      slf4jLogFilter.setStatementExecutableSqlLogEnable( true );              
      return slf4jLogFilter;                                                
  }

2、修改application.yml,增加慢sql日志的输出策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
logging:
   pattern: #配置日志格式 %d:日期 , %msg:日志信息 ,%n换行
    console: "%d - %msg%n" #设置控制台打印格式
   file: "%d{yyyy/MM/dd-HH:mm} %-5level %logger- %msg%n"
level:
  root: INFO
     org:
       springframework:
       security: ERROR
       web: ERROR
       hhu.yu: INFO
file:
  name: YU.log
     max-history: 30

3、修改数据源配置,设置慢sql拦截器和sql拦截器

1
2
3
4
5
6
7
8
9
10
11
@Bean                                                                   
  @Primary                     
  @Qualifier ( "mainDataSource" )                                            
  @ConfigurationProperties (prefix = "spring.datasource.main" )             
  DataSource mainConfig() throws SQLException{                            
      DruidDataSource build = DruidDataSourceBuilder.create().build();    
      List<Filter> filters = new ArrayList<>();                           
      filters.add(statFilter());                                          
      filters.add(logFilter());                                           
      build.setProxyFilters(filters);                                     
      return build;

重启系统后查看druid监控后台,由于设置了慢sql的时间为大于200毫秒,所以执行时间大于200毫秒的都会被红色标注。查看日志文件,可以看到日志文件中存在慢sql记录的数据(包括慢sql以及这条sql语句执行的时间)

开启Spring监控

在监控面板中开启spring监控功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Configuration
@EnableAspectJAutoProxy (proxyTargetClass = true )
public class DruidAspectConfig {
     @Bean
     public DruidStatInterceptor druidStatInterceptor() {
         DruidStatInterceptor dsInterceptor = new DruidStatInterceptor();
         return dsInterceptor;
     }
     @Bean
     @Scope ( "prototype" )
     public JdkRegexpMethodPointcut druidStatPointcut() {
         JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
         pointcut.setPatterns( "com.qa.cloud.mapper.*" , "com.qa.cloud.service.*" );
         return pointcut;
     }
     @Bean
     public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) {
         DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
         defaultPointAdvisor.setPointcut(druidStatPointcut);
         defaultPointAdvisor.setAdvice(druidStatInterceptor);
         return defaultPointAdvisor;
     }
转自:https://www.jb51.net/article/215301.htm


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM