只要引入了mybatisPlus相关jar包,项目自动集成。
兼容mybatisPlus 2.x和3.x的版本。
只要注解在mybatisPlus的serviceImpl上即可完成mp内置方法切换。
pom.xml
<!-- 动态数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.6</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
spring:
datasource:
dynamic:
# 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗
p6spy: true
hikari:
connection-timeout: 30000
max-lifetime: 1800000
max-pool-size: 15
min-idle: 5
connection-test-query: select 1
pool-name: HikariCP
# 配置默认数据源
primary: primary
datasource:
# 数据源-1,名称为 primary
primary:
username: root
password: #{password}
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://....:3306/teacher?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
# 数据源-2,名称为 slave_1
slave_1:
username: root
password: #{password}
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://....:3306/teacher2?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
业务层
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
注解在service实现或mapper接口方法上,但强烈不建议同时在service和mapper注解。 (可能会有问题)
注解 | 结果 |
---|---|
没有@DS | 默认数据源 |
@DS("dsName") | dsName可以为组名也可以为具体某个库的名称 |
@Override
@DS(value = "slave_1")
public IPage<Question> getQuestion(Integer pageNum,Integer pageSize){
Page<Question> page= new Page<>();
page.setCurrent(pageNum);
page.setSize(pageSize);
LambdaQueryWrapper<Question> qw = new LambdaQueryWrapper<>();
qw.orderByAsc(Question::getQOrder);
return questionMapper.selectPage(page, qw);
}
在调用mp的一些方法的时候始终切换不成功.
原因是 mp内置的ServiceImpl在新增,更改删除方法上自带事物.
解决办法:
-
重写自己的ServiceImpl 取消所有事物注解.
-
写自己的service方法,调用baseMapper的方法