springboot 一个方法里多数据源切换
时间: 2023-05-28 15:02:03 浏览: 170
在Spring Boot中,可以使用注解`@Primary`和`@Qualifier`来控制使用哪个数据源,例如:
```java
@Service
public class MyService {
@Autowired
@Qualifier("ds1")
private DataSource dataSource1;
@Autowired
@Qualifier("ds2")
private DataSource dataSource2;
@Transactional(value="txMgr1")
public void doSomethingWithDs1() {
// use dataSource1 to interact with datasource1 database
// ...
}
@Transactional(value="txMgr2")
public void doSomethingWithDs2() {
// use dataSource2 to interact with datasource2 database
// ...
}
}
```
在上面的示例代码中,`@Qualifier("ds1")`和`@Qualifier("ds2")`注解指定了要使用哪个具体的数据源。而`@Transactional`注解中的`value="txMgr1"`和`value="txMgr2"`指定了要使用哪个事务管理器来管理对应的数据源。
然后,在配置文件中可以分别配置两个数据源和对应的事务管理器:
```yaml
# 数据源1配置
spring:
datasource:
ds1:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds1
username: root
password: root
# 数据源2配置
spring:
datasource:
ds2:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds2
username: root
password: root
# 事务管理器1配置
spring:
transaction:
manage-name:
txMgr1:
datasources:
- # 对应的数据源1,必须与上面配置的一致
name: dataSource1
dataSource: ds1
# 事务管理器2配置
spring:
transaction:
manage-name:
txMgr2:
datasources:
- # 对应的数据源2,必须与上面配置的一致
name: dataSource2
dataSource: ds2
```
以上配置完成后,就可以在`MyService`类的方法中根据需要使用不同的数据源了。同时,在事务管理器的配置中也必须指定对应的数据源。
阅读全文