# 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # 主库数据源 master: url: jdbc:mysql://localhost:3306/ry_vue username: root password: 041008 # 从库数据源 slave: # 从数据源开关/默认关闭 enabled: false url: username: password: # 初始连接数 initialSize: 5 # 最小连接池数量 minIdle: 10 # 最大连接池数量 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置连接超时时间 connectTimeout: 30000 # 配置网络超时时间 socketTimeout: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最大生存的时间,单位是毫秒 maxEvictableIdleTimeMillis: 900000 # 配置检测连接是否有效 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置白名单,不填则允许所有访问 allow: url-pattern: /druid/* # 控制台管理用户名和密码 login-username: ruoyi login-password: 123456 filter: stat: enabled: true # 慢SQL记录 log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true
时间: 2025-03-11 11:04:23 浏览: 58
<think>好的,我现在需要帮用户解决如何配置Spring Boot应用中的Druid数据源,包括主库和从库的设置以及连接池参数的问题。首先,我得回忆一下Spring Boot整合Druid的基本步骤,以及多数据源的配置方法。
用户提到了主库和从库,这意味着需要配置多数据源。我之前了解过,在Spring Boot中配置多数据源通常需要创建不同的DataSource实例,并通过配置类来区分。而Druid作为连接池,需要为每个数据源单独配置参数,比如初始连接数、最大连接数等。
接下来,我需要考虑如何结构化解答案。通常步骤应该是先添加依赖,然后配置主库和从库的application.yml,接着创建配置类来定义数据源,最后可能还需要配置监控页面。同时,用户需要参数详解,所以得解释常见的连接池参数,比如initialSize、maxActive这些的作用和推荐值。
另外,用户可能对监控功能感兴趣,因为Druid的一个优势就是监控,所以需要说明如何启用监控,并配置访问路径。同时,要注意不同版本的Spring Boot可能会有差异,比如Spring Boot 2和3在依赖管理上可能不同,但用户的问题里没有特别指定版本,可能需要通用配置或者分开说明。
还要注意引用用户提供的参考内容,比如引用[2]和[4]提到了Druid的高性能和连接池优势,以及多数据源的应用场景,这些应该在回答中提到,并正确添加引用标识。
现在需要检查是否遗漏了关键点,比如多数据源配置时的@Primary注解,避免自动注入时的冲突,或者在配置类中使用@ConfigurationProperties绑定属性。此外,连接池参数的具体配置项需要详细列出,并给出典型值,帮助用户理解每个参数的作用。
可能还需要提醒用户注意数据库驱动的版本兼容性,以及Druid的监控页面安全设置,比如设置登录账号密码,避免未授权访问。同时,多数据源情况下,事务管理可能需要特别处理,但用户的问题可能不需要深入这部分,暂时先不提。
最后,生成相关问题,考虑用户可能的后续疑问,比如性能调优、监控集成、多数据源事务处理等,这样能帮助用户进一步探索。</think>以下为Spring Boot中配置Druid数据源(含主从库)及连接池参数的详解:
### 一、基础配置步骤
1. **添加依赖**(Spring Boot 2.x)
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
```
2. **application.yml配置**
```yaml
spring:
datasource:
master:
url: jdbc:mysql://主库IP:3306/db1
username: root
password: master_pwd
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
slave:
url: jdbc:mysql://从库IP:3306/db1
username: root
password: slave_pwd
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
filters: stat,wall
```
### 二、多数据源配置类
```java
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Primary
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("master", masterDataSource());
dataSourceMap.put("slave", slaveDataSource());
dynamicDataSource.setDefaultTargetDataSource(masterDataSource());
dynamicDataSource.setTargetDataSources(dataSourceMap);
return dynamicDataSource;
}
}
```
### 三、核心连接池参数详解
| 参数名称 | 默认值 | 说明 |
|-------------------------------|--------|--------------------------------------------------------------------|
| `initial-size` | 0 | 初始化时建立物理连接的个数,建议与min-idle相同[^4] |
| `max-active` | 8 | 最大连接池数量,生产环境建议20-50[^2] |
| `min-idle` | -1 | 最小空闲连接数,建议设置与initial-size相同 |
| `max-wait` | -1 | 获取连接时最大等待时间(毫秒),推荐60000(1分钟) |
| `time-between-eviction-runs-millis` | 60000 | 检测间隔(毫秒),建议设置60秒 |
| `min-evictable-idle-time-millis` | 300000 | 连接保持空闲的最小时间(毫秒),超时将被关闭 |
| `validation-query` | null | 检测连接是否有效的SQL语句,MySQL推荐`SELECT 1` |
| `test-while-idle` | true | 是否在空闲时检测连接有效性 |
### 四、监控配置(可选)
```java
@Bean
public ServletRegistrationBean<StatViewServlet> druidServlet() {
ServletRegistrationBean<StatViewServlet> reg = new ServletRegistrationBean<>();
reg.setServlet(new StatViewServlet());
reg.addUrlMappings("/druid/*");
reg.addInitParameter("loginUsername", "admin");
reg.addInitParameter("loginPassword", "admin123");
return reg;
}
```
访问路径:`http://localhost:8080/druid`[^2]
阅读全文
相关推荐



















