springboot配置双数据源
时间: 2023-07-07 08:43:08 浏览: 54
好的,下面是配置双数据源的步骤:
1. 在pom.xml文件中添加druid和jdbc依赖:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```
2. 在application.yml文件中配置数据源信息(例如:db1和db2):
```yml
spring:
datasource:
db1:
url: jdbc:mysql://localhost:3306/test1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
db2:
url: jdbc:mysql://localhost:3306/test2?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
```
3. 在代码中配置数据源和事务管理器:
```java
@Configuration
public class DataSourceConfig {
@Bean(name = "db1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource db1DataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "db2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource db2DataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "dynamicDataSource")
public DynamicDataSource dynamicDataSource(@Qualifier("db1DataSource") DataSource db1DataSource,
@Qualifier("db2DataSource") DataSource db2DataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DataSourceType.DB1, db1DataSource);
targetDataSources.put(DataSourceType.DB2, db2DataSource);
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(db1DataSource);
return dynamicDataSource;
}
@Bean
public PlatformTransactionManager transactionManager(DynamicDataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
```
4. 在代码中根据需要动态切换数据源:
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void addUser(User user) {
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.DB1);
userMapper.addUser(user);
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.DB2);
userMapper.addUser(user);
}
public List<User> getUsers() {
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.DB1);
List<User> userList1 = userMapper.getUsers();
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.DB2);
List<User> userList2 = userMapper.getUsers();
List<User> userList = new ArrayList<>();
userList.addAll(userList1);
userList.addAll(userList2);
return userList;
}
}
```
以上就是配置双数据源的步骤,希望能对你有所帮助。