集成mybaties_plus 的多数据源
时间: 2023-10-01 12:12:42 浏览: 53
要集成MyBatis-Plus的多数据源,可以按照以下步骤进行:
1. 在pom.xml中添加MyBatis-Plus和Druid的依赖。
```xml
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>{version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>{version}</version>
</dependency>
</dependencies>
```
2. 配置application.yml文件,添加多数据源的配置。
```yaml
spring:
datasource:
dynamic:
primary: ds1
datasource:
ds1:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds1?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
ds2:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds2?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
```
3. 创建MyBatis-Plus的多数据源配置类。
```java
@Configuration
public class MultiDataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource.dynamic.ds1")
public DataSource ds1() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.dynamic.ds2")
public DataSource ds2() {
return DruidDataSourceBuilder.create().build();
}
@Bean
public DataSourceRouting dataSourceRouting(@Qualifier("ds1") DataSource ds1, @Qualifier("ds2") DataSource ds2) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put("ds1", ds1);
targetDataSources.put("ds2", ds2);
DataSourceRouting dataSourceRouting = new DataSourceRouting();
dataSourceRouting.setTargetDataSources(targetDataSources);
dataSourceRouting.setDefaultTargetDataSource(ds1);
return dataSourceRouting;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSourceRouting dataSourceRouting) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSourceRouting);
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/**/*.xml"));
sqlSessionFactory.setGlobalConfig(globalConfiguration());
return sqlSessionFactory.getObject();
}
@Bean
public GlobalConfig globalConfiguration() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setDbType(DbType.MYSQL);
globalConfig.setSqlInjector(new MybatisPlusSqlInjector());
globalConfig.setMetaObjectHandler(new CustomMetaObjectHandler());
return globalConfig;
}
}
```
4. 创建一个DataSourceRouting类,用于根据不同的数据源进行路由。
```java
public class DataSourceRouting extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.get();
}
}
```
5. 创建一个数据源上下文类,用于在不同线程中切换数据源。
```java
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void set(String dataSourceKey) {
contextHolder.set(dataSourceKey);
}
public static String get() {
return contextHolder.get();
}
public static void clear() {
contextHolder.remove();
}
}
```
6. 在需要切换数据源的地方,调用DataSourceContextHolder.set方法进行切换。
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Integer id) {
DataSourceContextHolder.set("ds2");
User user = userMapper.selectById(id);
DataSourceContextHolder.clear();
return user;
}
}
```
这样就可以实现MyBatis-Plus的多数据源配置了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)
![](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)