如何在springboot 中利用ybatispuls配置多数据源
时间: 2024-05-05 07:21:43 浏览: 16
在Spring Boot中使用Mybatis Plus配置多数据源可以通过以下步骤实现:
1. 引入Mybatis Plus和Druid依赖,这里我以Maven为例:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
```
2. 配置Druid数据源
在application.yml或application.properties中配置Druid数据源,示例:
```yaml
spring:
datasource:
druid:
# 数据源1
datasource1:
url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据源2
datasource2:
url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
```
3. 配置Mybatis Plus
在配置文件中添加Mybatis Plus的配置,示例:
```yaml
mybatis-plus:
# 数据源1
datasource1:
mapper-locations: classpath:mapper/datasource1/*.xml
type-aliases-package: com.example.demo.entity.datasource1
# 数据源2
datasource2:
mapper-locations: classpath:mapper/datasource2/*.xml
type-aliases-package: com.example.demo.entity.datasource2
```
4. 创建多数据源配置类
创建一个多数据源配置类,用于配置多个数据源,示例:
```java
@Configuration
public class DataSourceConfig {
@Bean("datasource1")
@ConfigurationProperties(prefix = "spring.datasource.druid.datasource1")
public DataSource datasource1() {
return DruidDataSourceBuilder.create().build();
}
@Bean("datasource2")
@ConfigurationProperties(prefix = "spring.datasource.druid.datasource2")
public DataSource datasource2() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@Primary
public DynamicDataSource dataSource(@Qualifier("datasource1") DataSource datasource1,
@Qualifier("datasource2") DataSource datasource2) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DBTypeEnum.DATASOURCE1, datasource1);
targetDataSources.put(DBTypeEnum.DATASOURCE2, datasource2);
return new DynamicDataSource(datasource1, targetDataSources);
}
}
```
5. 创建数据源枚举类
创建一个枚举类,用于定义多个数据源的名称,示例:
```java
public enum DBTypeEnum {
DATASOURCE1,
DATASOURCE2
}
```
6. 创建动态数据源
创建一个动态数据源类,用于动态切换数据源,示例:
```java
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<DBTypeEnum> contextHolder = new ThreadLocal<>();
public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
super.setDefaultTargetDataSource(defaultTargetDataSource);
super.setTargetDataSources(targetDataSources);
super.afterPropertiesSet();
}
@Override
protected Object determineCurrentLookupKey() {
return contextHolder.get();
}
public static void setDbType(DBTypeEnum dbType) {
contextHolder.set(dbType);
}
public static void clearDbType() {
contextHolder.remove();
}
}
```
7. 创建数据源切换注解
创建一个注解类,用于标注需要切换数据源的方法,示例:
```java
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSourceSwitch {
DBTypeEnum value() default DBTypeEnum.DATASOURCE1;
}
```
8. 编写数据访问代码
在数据访问层中,使用注解标注需要切换数据源的方法,示例:
```java
@Repository
public interface UserMapper {
@DataSourceSwitch(DBTypeEnum.DATASOURCE1)
List<User> listUser1();
@DataSourceSwitch(DBTypeEnum.DATASOURCE2)
List<User> listUser2();
}
```
9. 测试
编写一个简单的测试类或者Controller,测试多数据源是否配置成功,示例:
```java
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/users1")
public List<User> listUser1() {
DynamicDataSource.setDbType(DBTypeEnum.DATASOURCE1);
return userMapper.listUser1();
}
@GetMapping("/users2")
public List<User> listUser2() {
DynamicDataSource.setDbType(DBTypeEnum.DATASOURCE2);
return userMapper.listUser2();
}
}
```
以上就是在Spring Boot中使用Mybatis Plus配置多数据源的完整流程,希望对您有所帮助。