篇首语:本文由小编为大家整理,主要介绍了Spring配置Druid详细说明相关的知识,希望对你有一定的参考价值。
**简单直接,上代码,开封即食**
- ***yml文件内容配置***
1 # 数据源配置 2 spring: 3 datasource: 4 type: com.alibaba.druid.pool.DruidDataSource 5 driverClassName: com.mysql.cj.jdbc.Driver 6 druid: 7 # 主库数据源 8 master: 9 url: jdbc:mysql://****10 username: ****11 password: ****12 # 从库数据源13 slave:14 # 从数据源开关/默认关闭15 enabled: false16 url: 17 username: 18 password: 19 # 初始连接数20 initialSize: 521 # 最小连接池数量22 minIdle: 1023 # 最大连接池数量24 maxActive: 2025 # 配置获取连接等待超时的时间26 maxWait: 6000027 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒28 timeBetweenEvictionRunsMillis: 6000029 # 配置一个连接在池中最小生存的时间,单位是毫秒30 minEvictableIdleTimeMillis: 30000031 # 配置一个连接在池中最大生存的时间,单位是毫秒32 maxEvictableIdleTimeMillis: 90000033 # 配置检测连接是否有效34 validationQuery: SELECT 1 FROM DUAL35 testWhileIdle: true36 testOnBorrow: false37 testOnReturn: false38 webStatFilter: 39 enabled: true40 statViewServlet:41 enabled: true42 # 设置白名单,不填则允许所有访问43 allow:44 url-pattern: /monitor/druid/*45 filter:46 stat:47 enabled: true48 # 慢SQL记录49 log-slow-sql: true50 slow-sql-millis: 100051 merge-sql: true52 wall:53 config:54 multi-statement-allow: true
- ***DruidConfig文件***
1 import java.io.IOException; 2 import java.util.HashMap; 3 import java.util.Map; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.ServletException; 7 import javax.servlet.ServletRequest; 8 import javax.servlet.ServletResponse; 9 import javax.sql.DataSource; 10 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 11 import org.springframework.boot.context.properties.ConfigurationProperties; 12 import org.springframework.boot.web.servlet.FilterRegistrationBean; 13 import org.springframework.context.annotation.Bean; 14 import org.springframework.context.annotation.Configuration; 15 import org.springframework.context.annotation.Primary; 16 import com.alibaba.druid.pool.DruidDataSource; 17 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; 18 import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; 19 import com.alibaba.druid.util.Utils; 20 import com.heater.common.enums.DataSourceType; 21 import com.heater.framework.config.properties.DruidProperties; 22 import com.heater.framework.datasource.DynamicDataSource; 23 24 /** 25 * druid 配置多数据源 26 */ 27 @Configuration 28 public class DruidConfig 29 30 @Bean 31 @ConfigurationProperties("spring.datasource.druid.master") 32 public DataSource masterDataSource(DruidProperties druidProperties) 33 34 DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); 35 return druidProperties.dataSource(dataSource); 36 37 38 @Bean 39 @ConfigurationProperties("spring.datasource.druid.slave") 40 @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") 41 public DataSource slaveDataSource(DruidProperties druidProperties) 42 43 DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); 44 return druidProperties.dataSource(dataSource); 45 46 47 @Bean(name = "dynamicDataSource") 48 @Primary 49 public DynamicDataSource dataSource(DataSource masterDataSource, DataSource slaveDataSource) 50 51 Map
- ***DruidProperties文件***
1 import org.springframework.beans.factory.annotation.Value; 2 import org.springframework.context.annotation.Configuration; 3 import com.alibaba.druid.pool.DruidDataSource; 4 5 /** 6 * druid 配置属性 7 */ 8 @Configuration 9 public class DruidProperties10 11 @Value("$spring.datasource.druid.initialSize")12 private int initialSize;13 14 @Value("$spring.datasource.druid.minIdle")15 private int minIdle;16 17 @Value("$spring.datasource.druid.maxActive")18 private int maxActive;19 20 @Value("$spring.datasource.druid.maxWait")21 private int maxWait;22 23 @Value("$spring.datasource.druid.timeBetweenEvictionRunsMillis")24 private int timeBetweenEvictionRunsMillis;25 26 @Value("$spring.datasource.druid.minEvictableIdleTimeMillis")27 private int minEvictableIdleTimeMillis;28 29 @Value("$spring.datasource.druid.maxEvictableIdleTimeMillis")30 private int maxEvictableIdleTimeMillis;31 32 @Value("$spring.datasource.druid.validationQuery")33 private String validationQuery;34 35 @Value("$spring.datasource.druid.testWhileIdle")36 private boolean testWhileIdle;37 38 @Value("$spring.datasource.druid.testOnBorrow")39 private boolean testOnBorrow;40 41 @Value("$spring.datasource.druid.testOnReturn")42 private boolean testOnReturn;43 44 public DruidDataSource dataSource(DruidDataSource datasource)45 46 /** 配置初始化大小、最小、最大 */47 datasource.setInitialSize(initialSize);48 datasource.setMaxActive(maxActive);49 datasource.setMinIdle(minIdle);50 51 /** 配置获取连接等待超时的时间 */52 datasource.setMaxWait(maxWait);53 54 /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */55 datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);56 57 /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */58 datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);59 datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);60 61 /**62 * 用来检测连接是否有效的sql,要求是一个查询语句,常用select "x"。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。63 */64 datasource.setValidationQuery(validationQuery);65 /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */66 datasource.setTestWhileIdle(testWhileIdle);67 /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */68 datasource.setTestOnBorrow(testOnBorrow);69 /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */70 datasource.setTestOnReturn(testOnReturn);71 return datasource;72 73
以上是关于Spring配置Druid详细说明的主要内容,如果未能解决你的问题,请参考以下文章