mybatisplus 多数据源
时间: 2023-09-01 21:12:46 浏览: 125
mybatisplus 配置多数据源
MybatisPlus 支持多数据源配置,可以通过配置多个数据源来实现对不同数据库的读写操作。下面是一个简单的多数据源配置示例:
1. 配置多个数据源
```java
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.ds1")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.ds2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
}
```
2. 配置 MybatisPlus 的数据源和事务管理器
```java
@Configuration
@MapperScan(basePackages = "com.example.mapper")
public class MybatisPlusConfig {
@Autowired
@Qualifier("dataSource1")
private DataSource dataSource1;
@Autowired
@Qualifier("dataSource2")
private DataSource dataSource2;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dynamicDataSource());
return factoryBean.getObject();
}
@Bean
public DataSource dynamicDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("dataSource1", dataSource1);
dataSourceMap.put("dataSource2", dataSource2);
dynamicDataSource.setTargetDataSources(dataSourceMap);
dynamicDataSource.setDefaultTargetDataSource(dataSource1);
return dynamicDataSource;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dynamicDataSource());
}
}
```
3. 配置数据源的路由策略
```java
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceKey();
}
}
```
4. 在需要切换数据源的地方设置数据源的 key
```java
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDataSourceKey(String dataSourceKey) {
contextHolder.set(dataSourceKey);
}
public static String getDataSourceKey() {
return contextHolder.get();
}
public static void clearDataSourceKey() {
contextHolder.remove();
}
}
```
这样就可以在不同的操作中切换不同的数据源了。例如:
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getAllUsersFromDataSource1() {
DataSourceContextHolder.setDataSourceKey("dataSource1");
return userMapper.selectAll();
}
public List<User> getAllUsersFromDataSource2() {
DataSourceContextHolder.setDataSourceKey("dataSource2");
return userMapper.selectAll();
}
}
```
以上是一个简单的 MybatisPlus 多数据源配置示例,具体实现可以根据自己的业务需求进行调整。
阅读全文