多数据源是指一个应用程序同时连接多个不同的数据库
1、添加依赖
<!--mybatis-plus 持久层-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Oracle JDBC Driver -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
2、配置数据源
spring:
datasource:
dynamic:
primary: db1 #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
db1: #mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://XXXX:3306/jy_gz?characterEncoding=utf-8&useSSL=false
username: xxx
password: xxx
db2: #oracle
url: jdbc:oracle:thin:@//xxxx:1521/ncdb
username: xxx
password: xxx
driver-class-name: oracle.jdbc.OracleDriver
3、使用 @DS 切换数据源。
可以使用在方法和类上,方法的优先级是高于类的
@Repository
@DS("db1") //配置文件里的mysql数据源db1
public interface mysqlAssetCardMapper extends BaseMapper<AssetCard>{
@DS("db2") 配置文件里的oracle数据源db2
public List<String> getAssetCardCode();
}
注意:两个不同数据库之间同步数据格式会存在差异,建议使用对象属性拷贝(保持对象属性名一致) BeanUtils.copyProperties(oldvo,newvo);
MyBatis-Plus官方文档《多数据源 | MyBatis-Plus》