springboot 关于druid多数据源配置文件
时间: 2023-10-21 21:11:57 浏览: 204
好的,关于Spring Boot中使用Druid实现多数据源配置,你可以按照以下步骤进行操作:
1. 添加Druid和JDBC依赖
在pom.xml文件中,添加以下依赖:
```xml
<!-- Druid依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<!-- JDBC依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```
2. 配置Druid数据源
在application.yml配置文件中,添加Druid数据源的配置,包括主数据源和从数据源的配置,例如:
```yml
spring:
datasource:
master:
url: jdbc:mysql://localhost:3306/db_master?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# Druid配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
slave:
url: jdbc:mysql://localhost:3306/db_slave?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# Druid配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
```
3. 配置数据源路由
在配置类中,使用@Primary注解指定主数据源,使用@Qualifier注解指定从数据源,使用@DependsOn注解保证数据源初始化顺序,例如:
```java
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave")
@DependsOn("masterDataSource")
public DataSource slaveDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@DependsOn({"masterDataSource", "slaveDataSource"})
public DataSourceRouting dataSourceRouting(@Qualifier("masterDataSource") DataSource masterDataSource,
@Qualifier("slaveDataSource") DataSource slaveDataSource) {
return new DataSourceRouting(masterDataSource, slaveDataSource);
}
}
```
4. 配置数据源切换
使用ThreadLocal实现数据源切换,例如:
```java
public class DataSourceRouting {
private final ThreadLocal<String> dataSourceKey = new ThreadLocal<>();
private final DataSource masterDataSource;
private final DataSource slaveDataSource;
public DataSourceRouting(DataSource masterDataSource, DataSource slaveDataSource) {
this.masterDataSource = masterDataSource;
this.slaveDataSource = slaveDataSource;
}
public DataSource determineDataSource() {
String key = dataSourceKey.get();
if (key != null && !key.isEmpty()) {
if ("master".equals(key)) {
return masterDataSource;
} else if ("slave".equals(key)) {
return slaveDataSource;
}
}
return masterDataSource;
}
public void setDataSourceKey(String key) {
dataSourceKey.set(key);
}
public void clearDataSourceKey() {
dataSourceKey.remove();
}
}
```
5. 在需要切换数据源的地方调用setDataSourceKey方法进行切换
例如:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private DataSourceRouting dataSourceRouting;
@Override
public User getUserById(Long id) {
dataSourceRouting.setDataSourceKey("slave");
User user = userDao.getUserById(id);
dataSourceRouting.clearDataSourceKey();
return user;
}
@Override
@Transactional
public void addUser(User user) {
dataSourceRouting.setDataSourceKey("master");
userDao.addUser(user);
dataSourceRouting.clearDataSourceKey();
}
}
```
以上就是使用Druid实现Spring Boot多数据源配置的步骤,希望对你有所帮助。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)