当前位置:   article > 正文

springboot集成druid监控配置_spring.datasource.druid.filters

spring.datasource.druid.filters

1 添加Druid依赖

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

2 添加druid properties文件内的数据库连接信息配置
 

  1. spring.datasource.name=optocon
  2. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  3. spring.datasource.druid.filters=stat,wall,logback
  4. spring.datasource.druid.filter.stat.log-slow-sql=true
  5. spring.datasource.druid.filter.stat.merge-sql=true
  6. spring.datasource.druid.filter.stat.slow-sql-millis=1
  7. spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
  8. spring.datasource.druid.url=
  9. spring.datasource.druid.username=
  10. spring.datasource.druid.password=
  11. #配置初始化大小/最小/最大
  12. spring.datasource.druid.initial-size=5
  13. spring.datasource.druid.min-idle=1
  14. spring.datasource.druid.max-active=20
  15. #获取连接等待超时时间
  16. spring.datasource.druid.max-wait=60000
  17. #间隔多久进行一次检测,检测需要关闭的空闲连接
  18. spring.datasource.druid.time-between-eviction-runs-millis=60000
  19. spring.datasource.druid.validation-query=SELECT 'x'
  20. spring.datasource.druid.test-while-idle=true
  21. spring.datasource.druid.test-on-borrow=false
  22. spring.datasource.druid.test-on-return=false
  23. #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
  24. spring.datasource.druid.pool-prepared-statements=false
  25. spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20


 

3 配置druid连接池以及慢日志配置

其中statFilter 配置了慢日志开启,慢日志阈值等。

  1. package com.iscas.business.config.db;
  2. import java.sql.SQLException;
  3. import java.util.Arrays;
  4. import javax.sql.DataSource;
  5. import com.alibaba.druid.filter.logging.Slf4jLogFilter;
  6. import com.alibaba.druid.filter.stat.StatFilter;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.cloud.context.config.annotation.RefreshScope;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.context.annotation.Primary;
  12. import com.alibaba.druid.pool.DruidDataSource;
  13. import lombok.extern.slf4j.Slf4j;
  14. @Slf4j
  15. @Configuration
  16. @RefreshScope
  17. public class DruidConfiguration {
  18. @Value("${spring.datasource.druid.url}")
  19. private String dbUrl;
  20. @Value("${spring.datasource.druid.username}")
  21. private String username;
  22. @Value("${spring.datasource.druid.password}")
  23. private String password;
  24. @Value("${spring.datasource.druid.driver-class-name}")
  25. private String driverClassName;
  26. @Value("${spring.datasource.druid.initial-size}")
  27. private int initialSize;
  28. @Value("${spring.datasource.druid.min-idle}")
  29. private int minIdle;
  30. @Value("${spring.datasource.druid.max-active}")
  31. private int maxActive;
  32. @Value("${spring.datasource.druid.max-wait}")
  33. private int maxWait;
  34. @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
  35. private int timeBetweenEvictionRunsMillis;
  36. @Value("${spring.datasource.druid.min-evictable-idle-time-millis:60000}")
  37. private int minEvictableIdleTimeMillis;
  38. @Value("${spring.datasource.druid.validation-query}")
  39. private String validationQuery;
  40. @Value("${spring.datasource.druid.test-while-idle}")
  41. private boolean testWhileIdle;
  42. @Value("${spring.datasource.druid.test-on-borrow}")
  43. private boolean testOnBorrow;
  44. @Value("${spring.datasource.druid.test-on-return}")
  45. private boolean testOnReturn;
  46. @Value("${spring.datasource.druid.pool-prepared-statements}")
  47. private boolean poolPreparedStatements;
  48. @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
  49. private int maxPoolPreparedStatementPerConnectionSize;
  50. @Value("${spring.datasource.druid.filters:stat,wall,logback}")
  51. private String filters;
  52. @Value("${spring.datasource.druid.filter.stat.log-slow-sql:true}")
  53. private boolean logslowSql;
  54. @Value("${spring.datasource.druid.filter.stat.merge-sql:true}")
  55. private boolean mergeSql;
  56. @Value("${spring.datasource.druid.filter.stat.slow-sql-millis:200}")
  57. private long slowSqlMill;
  58. @Bean //声明其为Bean实例
  59. @Primary //在同样的DataSource中,首先使用被标注的DataSource
  60. @RefreshScope
  61. public DataSource dataSource(){
  62. DruidDataSource datasource = new DruidDataSource();
  63. datasource.setUrl(this.dbUrl);
  64. datasource.setUsername(username);
  65. datasource.setPassword(password);
  66. datasource.setDriverClassName(driverClassName);
  67. //configuration
  68. datasource.setInitialSize(initialSize);
  69. datasource.setMinIdle(minIdle);
  70. datasource.setMaxActive(maxActive);
  71. datasource.setMaxWait(maxWait);
  72. datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
  73. datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
  74. datasource.setValidationQuery(validationQuery);
  75. datasource.setTestWhileIdle(testWhileIdle);
  76. datasource.setTestOnBorrow(testOnBorrow);
  77. datasource.setTestOnReturn(testOnReturn);
  78. datasource.setPoolPreparedStatements(poolPreparedStatements);
  79. datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
  80. try {
  81. datasource.setFilters(filters);
  82. } catch (SQLException e) {
  83. log.error("druid configuration initialization filter: "+ e);
  84. }
  85. datasource.setProxyFilters(Arrays.asList(statFilter(),logFilter()));
  86. return datasource;
  87. }
  88. @Bean
  89. @Primary
  90. public StatFilter statFilter(){
  91. StatFilter statFilter = new StatFilter();
  92. statFilter.setSlowSqlMillis(slowSqlMill);
  93. statFilter.setLogSlowSql(logslowSql);
  94. statFilter.setMergeSql(mergeSql);
  95. return statFilter;
  96. }
  97. @Bean
  98. public Slf4jLogFilter logFilter(){
  99. Slf4jLogFilter filter = new Slf4jLogFilter();
  100. return filter;
  101. }
  102. }

4 配置druid监控,过滤URL用户名密码黑名单白名单等

  1. package com.iscas.business.config.db;
  2. import com.alibaba.druid.filter.stat.StatFilter;
  3. import com.alibaba.druid.support.http.StatViewServlet;
  4. import com.alibaba.druid.support.http.WebStatFilter;
  5. import com.iscas.business.config.StaticInfo;
  6. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  7. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.core.Ordered;
  11. @Configuration
  12. public class DruidMonitorConfiguration {
  13. /**
  14. * 注册一个StatViewServlet
  15. * @return
  16. */
  17. @Bean
  18. public ServletRegistrationBean DruidStatViewServle2(){
  19. //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
  20. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid2/*");
  21. //添加初始化参数:initParams
  22. //白名单:
  23. // servletRegistrationBean.addInitParameter("allow","127.0.0.1");
  24. //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
  25. servletRegistrationBean.addInitParameter("deny","192.168.1.73");
  26. //登录查看信息的账号密码.
  27. servletRegistrationBean.addInitParameter("loginUsername","druid");
  28. servletRegistrationBean.addInitParameter("loginPassword","druid");
  29. //是否能够重置数据.
  30. servletRegistrationBean.addInitParameter("resetEnable","false");
  31. return servletRegistrationBean;
  32. }
  33. /**
  34. * 注册一个:filterRegistrationBean
  35. * @return
  36. */
  37. @Bean
  38. public FilterRegistrationBean druidStatFilter2(){
  39. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
  40. //添加过滤规则.
  41. filterRegistrationBean.addUrlPatterns("/*");
  42. //添加不需要忽略的格式信息.
  43. filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid2/*," +
  44. "/swagger-resources/*,/loginTest/*,/api/*,/webjars/*./webSocketServer/*,/webSocketTest/*,*.html,*.json");
  45. return filterRegistrationBean;
  46. }
  47. }

5 logback.xml中添加druid慢日志配置单独打包到一个文件内

  1. <appender name="DruidFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  2. <!-- 正在记录的日志文件的路径及文件名 -->
  3. <file>${LOG_PATH}/${APPDIR}/log_druid.log</file>
  4. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  5. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  6. <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  7. 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
  8. <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-druid-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  9. <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
  10. 命名日志文件,例如log-error-2013-12-21.0.log -->
  11. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  12. <maxFileSize>2MB</maxFileSize>
  13. </timeBasedFileNamingAndTriggeringPolicy>
  14. </rollingPolicy>
  15. <!-- 追加方式记录日志 -->
  16. <append>true</append>
  17. <!-- 日志文件的格式 -->
  18. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  19. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
  20. <charset>utf-8</charset>
  21. </encoder>
  22. <!-- 此日志文件只记录info级别的 -->
  23. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  24. <level>ERROR</level>
  25. <onMatch>ACCEPT</onMatch>
  26. <onMismatch>DENY</onMismatch>
  27. </filter>
  28. </appender>
  29. <logger name="com.alibaba.druid.filter.stat.StatFilter" level="ERROR">
  30. <appender-ref ref="DruidFILE" />
  31. </logger>

 

 

   

6 开启spring监控

  1. package com.iscas.business.config.db;
  2. import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
  3. import org.springframework.aop.support.DefaultPointcutAdvisor;
  4. import org.springframework.aop.support.JdkRegexpMethodPointcut;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.context.annotation.Scope;
  8. @Configuration
  9. @EnableAspectJAutoProxy(proxyTargetClass = true)
  10. public class SpringDaoMethodAspect {
  11. @Bean
  12. public DruidStatInterceptor druidStatInterceptor() {
  13. DruidStatInterceptor dsInterceptor = new DruidStatInterceptor();
  14. return dsInterceptor;
  15. }
  16. @Bean
  17. @Scope("prototype")
  18. public JdkRegexpMethodPointcut druidStatPointcut() {
  19. JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
  20. pointcut.setPatterns("com.iscas.business.test.controller.*",
  21. "com.iscas.business.controller.*");
  22. return pointcut;
  23. }
  24. @Bean
  25. public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) {
  26. DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
  27. defaultPointAdvisor.setPointcut(druidStatPointcut);
  28. defaultPointAdvisor.setAdvice(druidStatInterceptor);
  29. return defaultPointAdvisor;
  30. }
  31. }

7 访问 http://[ip]:[port]/[context-path]/druid2/index.html,使用配置的用户名密码登录

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/46533
推荐阅读
相关标签
  

闽ICP备14008679号