maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.3.0</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.18</version> </dependency>
yaml文件配置
spring: datasource: # 数据源基本配置 url: jdbc:mysql://localhost:3306/hotel?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # 数据源其他配置 druid: # 配置初始化大小、最小、最大线程数 initialSize: 5 minIdle: 5 # CPU核数+1,也可以大些但不要超过20,数据库加锁时连接过多性能下降 maxActive: 20 # 最大等待时间,内网:800,外网:1200(三次握手1s) maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最大空间时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 testWhileIdle: true # 设置从连接池获取连接时是否检查连接有效性,true检查,false不检查 testOnBorrow: true # 设置从连接池归还连接时是否检查连接有效性,true检查,false不检查 testOnReturn: true # 可以支持PSCache(提升写入、查询效率) poolPreparedStatements: true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j2 # 保持长连接 keepAlive: true maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
添加配置类
Spring Boot2:
import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.Filter; import javax.servlet.Servlet; @Configuration public class DruidConfig { /** * 配置Druid 监控启动页面 * * @return servletRegistrationBean */ @Bean @ConditionalOnMissingBean public ServletRegistrationBean<Servlet> druidStartViewServlet() { ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(new StatViewServlet(), "/druid/*"); // 白名单 servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); // 黑名单 servletRegistrationBean.addInitParameter("deny", "192.168.1.100"); // 登录查看信息的账密,用于登录Druid监控后台 servletRegistrationBean.addInitParameter("loginUsername", "druid"); servletRegistrationBean.addInitParameter("loginPassword", "druid"); // 是否能够重置数据 servletRegistrationBean.addInitParameter("resetEnable", "true"); return servletRegistrationBean; } /** * Druid监控过滤器配置规则 * ConditionalOnMissingBean 防止注册相同的bean * * @return filterFilterRegistrationBean */ @Bean @ConditionalOnMissingBean public FilterRegistrationBean<Filter> filterRegistrationBean() { FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>(); filterFilterRegistrationBean.setFilter(new WebStatFilter()); // 添加过滤规则 filterFilterRegistrationBean.addUrlPatterns("/*"); // 添加不需要忽略的格式信息 filterFilterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterFilterRegistrationBean; } }
spring Boot3:
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.jakarta.StatViewServlet; import com.alibaba.druid.support.jakarta.WebStatFilter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.util.HashMap; import java.util.List; import java.util.Map; @Configuration public class DruidConfig { /** * 添加 DruidDataSource 组件到容器中,并绑定属性 */ @Bean @ConfigurationProperties(prefix = "spring.datasource") @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource") public DataSource druid(){ return new DruidDataSource(); } /** * 配置 Druid 监控管理后台的Servlet; * 内置 Servlet 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式 */ @Bean @ConditionalOnClass(DruidDataSource.class) public ServletRegistrationBean statViewServlet(){ // 这些参数可以在 http.StatViewServlet 的父类 ResourceServlet 中找到 Map<String,String> initParams = new HashMap<>(); initParams.put("loginUsername","druid"); initParams.put("loginPassword","druid"); // allow:Druid 后台允许谁可以访问。默认就是允许所有访问。 initParams.put("allow",""); // 后面参数为空则所有人都能访问,一般会写一个具体的ip或ip段 // deny:Druid 后台禁止谁能访问 // initParams.put("deny","192.168.10.132"); // 注册一个servlet,同时表明/druid/* 这个请求会走到这个servlet,而druid内置了这个请求的接收 ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); bean.setInitParameters(initParams); return bean; } /** * 配置一个web监控的filter */ @Bean @ConditionalOnClass(DruidDataSource.class) public FilterRegistrationBean webStatFilter(){ Map<String,String> initParams = new HashMap<>(); // 这些不进行统计 initParams.put("exclusions","*.js,*.css,/druid/*"); FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); bean.setInitParameters(initParams); bean.setUrlPatterns(List.of("/*")); return bean; } }