多数据源是java项目中常遇到的需求,传统的方式我们需要编写大量代码来实现,过程比较复杂,mybatisplus的出现使得多数据源的实现十分快速简单。
第一步:
引入mybatisplus相关依赖,多数据源相关的是dynamic-datasource-spring-boot-starter依赖
<!-- mybatisplus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.vesion}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>${mybatis-plus-extension.vesion}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis-plus-core.vesion}</version>
</dependency>
<!-- 代码生成 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.generator.vesion}</version>
</dependency>
<!-- 多数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${mybatis-plus.dynamic.vesion}</version>
</dependency>
第二步,yml文件中配置多数据源
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
url: jdbc:sqlserver://XXXXXX:XXXX;Databasename=XXXX
username: XXX
password: XXXXXX
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
slave:
url: jdbc:oracle:thin:@XXXX:XXXX
username: sys as SYSDBA
password: 'XXXXX'
driver-class-name: oracle.jdbc.OracleDriver
第三步,在service类中使用@DS注解来实现数据源切换,注解可以写在类上,也可以写在方法上,方法上的优先级高于类,如果没有指定DS的属性值或者没有使用DS注解,就自动走master主库。
@Service
@DS("slave")
public class SisOrginServiceImpl extends ServiceImpl<SisOriginMapper, SisOriginEntity> implements SisOriginService {
@Override
public List<SisOriginEntity> getList(int day){
String filterStartDate = DateUtil.dateToStringBjZone(DateUtil.dateAddDays(new Date(), day), "yyyy-MM-dd HH:mm:ss");
QueryWrapper<SisOriginEntity> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().apply("dt_apprvd > TO_DATE({0},'yyyy-MM-dd hh24:mi:ss')", filterStartDate);
return this.list(queryWrapper);
}
}
通过以上三个步骤,便可以快捷的实现多数据源切换。