目录
在项目的开发过程中遇到多数据源的情况,第一次遇见进行捕获记录。就决定是你了,大师球。
公司拟开发某项目,需要开发一个处理信息的构件用于管理员工与部门之间的关系,但是遇见一个数据在不同数据库的问题,员工信息在北京机房数据库(HJ)中,部门信息在湖北机房数据库(HB)中,现该构件需要同时操作员工和部门表。采用Mybatis-puls + dynamic用于处理多数据源问题。
依赖配置
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置文件
spring:
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值即为 bj
primary: bj
# 严格匹配数据源,默认false.true未匹配到指定数据源时抛异常,false使用默认数据源
strict: false
datasource:
bj:
url: jdbc:mysql://192.168.64.128:3306/bj?characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
hb:
url: jdbc:mysql://192.168.64.129:33331/hb?characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
实体类
@TableName("user")
@Data
public class User {
@TableId(type = IdType.AUTO)
private String id;
private String name;
private String password;
}
@TableName("dept")
@Data
public class Dept {
@TableId(type = IdType.AUTO)
private String id;
private String name;
private String note;
}
Mapper
通过DS注解指定数据源。
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@DS("bj")
public interface UserMapper extends BaseMapper<User> {
}
@DS("hb")
public interface DeptMapper extends BaseMapper<Dept> {
}
简单测试
@Resource
private UserMapper userMapper;
@Resource
private DeptMapper deptMapper;
@GetMapping
public void applyResources() {
User user = new User();
user.setId("1234");
user.setName("北京用户");
user.setPassword("123456");
userMapper.insert(user);
Dept dept = new Dept();
dept.setId("456");
dept.setName("湖北单位");
dept.setNote("....");
deptMapper.insert(dept);
}