DruidConfig.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.zjt.config;
  2. import com.alibaba.druid.filter.Filter;
  3. import com.alibaba.druid.filter.stat.StatFilter;
  4. import com.alibaba.druid.pool.DruidDataSource;
  5. import com.alibaba.druid.support.http.StatViewServlet;
  6. import com.alibaba.druid.support.http.WebStatFilter;
  7. import com.alibaba.druid.wall.WallConfig;
  8. import com.alibaba.druid.wall.WallFilter;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Value;
  12. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  13. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  14. import org.springframework.context.annotation.Bean;
  15. import org.springframework.context.annotation.Configuration;
  16. import org.springframework.context.annotation.Primary;
  17. import javax.sql.DataSource;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. /**
  21. * Druid配置
  22. *
  23. * @author tanxiaoxu
  24. */
  25. @Configuration
  26. public class DruidConfig {
  27. private Logger logger = LoggerFactory.getLogger(DruidConfig.class);
  28. @Value("${spring.datasource.url:#{null}}")
  29. private String dbUrl;
  30. @Value("${spring.datasource.username: #{null}}")
  31. private String username;
  32. @Value("${spring.datasource.password:#{null}}")
  33. private String password;
  34. @Value("${spring.datasource.driverClassName:#{null}}")
  35. private String driverClassName;
  36. @Value("${spring.datasource.initialSize:#{null}}")
  37. private Integer initialSize;
  38. @Value("${spring.datasource.minIdle:#{null}}")
  39. private Integer minIdle;
  40. @Value("${spring.datasource.maxActive:#{null}}")
  41. private Integer maxActive;
  42. @Value("${spring.datasource.maxWait:#{null}}")
  43. private Integer maxWait;
  44. @Value("${spring.datasource.timeBetweenEvictionRunsMillis:#{null}}")
  45. private Integer timeBetweenEvictionRunsMillis;
  46. @Value("${spring.datasource.minEvictableIdleTimeMillis:#{null}}")
  47. private Integer minEvictableIdleTimeMillis;
  48. @Value("${spring.datasource.validationQuery:#{null}}")
  49. private String validationQuery;
  50. @Value("${spring.datasource.testWhileIdle:#{null}}")
  51. private Boolean testWhileIdle;
  52. @Value("${spring.datasource.testOnBorrow:#{null}}")
  53. private Boolean testOnBorrow;
  54. @Value("${spring.datasource.testOnReturn:#{null}}")
  55. private Boolean testOnReturn;
  56. @Value("${spring.datasource.poolPreparedStatements:#{null}}")
  57. private Boolean poolPreparedStatements;
  58. @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize:#{null}}")
  59. private Integer maxPoolPreparedStatementPerConnectionSize;
  60. @Value("${spring.datasource.filters:#{null}}")
  61. private String filters;
  62. @Value("{spring.datasource.connectionProperties:#{null}}")
  63. private String connectionProperties;
  64. @Bean
  65. @Primary
  66. public DataSource dataSource(){
  67. DruidDataSource datasource = new DruidDataSource();
  68. datasource.setUrl(this.dbUrl);
  69. datasource.setUsername(username);
  70. datasource.setPassword(password);
  71. datasource.setDriverClassName(driverClassName);
  72. //configuration
  73. if(initialSize != null) {
  74. datasource.setInitialSize(initialSize);
  75. }
  76. if(minIdle != null) {
  77. datasource.setMinIdle(minIdle);
  78. }
  79. if(maxActive != null) {
  80. datasource.setMaxActive(maxActive);
  81. }
  82. if(maxWait != null) {
  83. datasource.setMaxWait(maxWait);
  84. }
  85. if(timeBetweenEvictionRunsMillis != null) {
  86. datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
  87. }
  88. if(minEvictableIdleTimeMillis != null) {
  89. datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
  90. }
  91. if(validationQuery!=null) {
  92. datasource.setValidationQuery(validationQuery);
  93. }
  94. if(testWhileIdle != null) {
  95. datasource.setTestWhileIdle(testWhileIdle);
  96. }
  97. if(testOnBorrow != null) {
  98. datasource.setTestOnBorrow(testOnBorrow);
  99. }
  100. if(testOnReturn != null) {
  101. datasource.setTestOnReturn(testOnReturn);
  102. }
  103. if(poolPreparedStatements != null) {
  104. datasource.setPoolPreparedStatements(poolPreparedStatements);
  105. }
  106. if(maxPoolPreparedStatementPerConnectionSize != null) {
  107. datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
  108. }
  109. if(connectionProperties != null) {
  110. datasource.setConnectionProperties(connectionProperties);
  111. }
  112. List<Filter> filters = new ArrayList<>();
  113. filters.add(statFilter());
  114. filters.add(wallFilter());
  115. datasource.setProxyFilters(filters);
  116. return datasource;
  117. }
  118. @Bean
  119. public ServletRegistrationBean druidServlet() {
  120. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
  121. //控制台管理用户,加入下面2行 进入druid后台就需要登录
  122. //servletRegistrationBean.addInitParameter("loginUsername", "admin");
  123. //servletRegistrationBean.addInitParameter("loginPassword", "admin");
  124. return servletRegistrationBean;
  125. }
  126. @Bean
  127. public FilterRegistrationBean filterRegistrationBean() {
  128. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
  129. filterRegistrationBean.setFilter(new WebStatFilter());
  130. filterRegistrationBean.addUrlPatterns("/*");
  131. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
  132. filterRegistrationBean.addInitParameter("profileEnable", "true");
  133. return filterRegistrationBean;
  134. }
  135. @Bean
  136. public StatFilter statFilter(){
  137. StatFilter statFilter = new StatFilter();
  138. statFilter.setLogSlowSql(true); //slowSqlMillis用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢。
  139. statFilter.setMergeSql(true); //SQL合并配置
  140. statFilter.setSlowSqlMillis(1000);//slowSqlMillis的缺省值为3000,也就是3秒。
  141. return statFilter;
  142. }
  143. @Bean
  144. public WallFilter wallFilter(){
  145. WallFilter wallFilter = new WallFilter();
  146. //允许执行多条SQL
  147. WallConfig config = new WallConfig();
  148. config.setMultiStatementAllow(true);
  149. wallFilter.setConfig(config);
  150. return wallFilter;
  151. }
  152. }