springboot mybatis-plus配置数据源
时间: 2024-01-16 13:19:02 浏览: 105
以下是使用SpringBoot和Mybatis-plus配置多数据源的步骤:
1. 首先,在pom.xml文件中添加Mybatis-plus和数据库驱动的依赖:
```xml
<dependencies>
<!-- Mybatis-plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
<!-- 数据库驱动依赖 -->
<dependency>
<groupId>数据库驱动的groupId</groupId>
<artifactId>数据库驱动的artifactId</artifactId>
<version>数据库驱动的版本</version>
</dependency>
</dependencies>
```
2. 在application.yml或application.properties文件中配置数据源信息:
```yaml
spring:
datasource:
# 主数据源配置
url: 主数据源的URL
username: 主数据源的用户名
password: 主数据源的密码
driver-class-name: 主数据源的驱动类名
# 其他数据源配置
datasources:
数据源1的名称:
url: 数据源1的URL
username: 数据源1的用户名
password: 数据源1的密码
driver-class-name: 数据源1的驱动类名
数据源2的名称:
url: 数据源2的URL
username: 数据源2的用户名
password: 数据源2的密码
driver-class-name: 数据源2的驱动类名
```
3. 创建多数据源配置类,继承AbstractRoutingDataSource,并重写determineCurrentLookupKey方法,根据注解选择使用哪个数据源:
```java
@Configuration
public class MultipleDataSourceConfig extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSource();
}
}
```
4. 创建数据源上下文类,用于设置和获取当前使用的数据源:
```java
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDataSource(String dataSource) {
contextHolder.set(dataSource);
}
public static String getDataSource() {
return contextHolder.get();
}
public static void clearDataSource() {
contextHolder.remove();
}
}
```
5. 创建数据源切换注解,用于在方法或类上标注使用哪个数据源:
```java
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
String value() default "主数据源";
}
```
6. 创建数据源切面类,用于根据注解切换数据源:
```java
@Aspect
@Component
public class DataSourceAspect {
@Before("@annotation(dataSource)")
public void switchDataSource(JoinPoint joinPoint, DataSource dataSource) {
String dataSourceName = dataSource.value();
DataSourceContextHolder.setDataSource(dataSourceName);
}
@After("@annotation(dataSource)")
public void restoreDataSource(JoinPoint joinPoint, DataSource dataSource) {
DataSourceContextHolder.clearDataSource();
}
}
```
7. 在需要使用多数据源的方法或类上使用@DataSource注解,指定使用哪个数据源:
```java
@DataSource("数据源1的名称")
public void method1() {
// 使用数据源1执行操作
}
@DataSource("数据源2的名称")
public void method2() {
// 使用数据源2执行操作
}
```
阅读全文