SpringBoot+Mybatisplus配置多数据源(超级简单!!!!)
今天分享配置多数据源的另外一种方式,SpringBo+Mybatisplus配置多数据源,此种方式配置相对简单,都是苞米豆封装好的,配置容易;此篇分享比较简单的方式配置数据源,多个固定的数据源,通过注解选择使用哪个数据源!
- 首先需要引入下面的核心依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.0</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.20</version></dependency>
- yml文件中配置数据源:
server:port: 8000
spring:datasource:dynamic:# 配置默认数据库,及没有注解指定时走的数据库primary: master#严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源strict: falsedatasource:master: # 默认数据源配置url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverslave: # 其他数据源配置url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverhikari:connection-test-query: select 1maximum-pool-size: 8minimum-idle: 2auto-commit: truepool-name: DatebookHikariCPmax-lifetime: 1800000connection-timeout: 30000keepalive-time: 60000
3.使用示例
使用注解@DS指定数据源,给使用非默认数据源添加注解@DS,比如@DS(“slave”),如果不加或者加@DS(“master”),就会走默认数据源;@DS可以注解在 方法 上和 类 上,同时存在方法注解优先于类上注解;注解在 controller层、service 实现或 mapper 接口方法上,不要同时在 service 和 mapper 注解;
官方强烈建议加在service上,主要要保证事务!
@Service
@DS("slave")
public class UserServiceImpl extends ServiceImpl<ModelMapper, Model> implements IUserService {}
@DS("slave")
List<UserInfo> selectAll();
- 数据源失效场景
如果方法或类上添加了 @Transactional,需指定事务管理器或禁用事务自动绑定,否则另外一个数据源失效。或者去掉@Transactional,或者指定事务管理器。
@DS("slave")
@Transactional(rollbackFor = Exception.class, transactionManager = "dynamicDataSourceTransactionManager") // 显式指定事务管理器
@Override
public void updateUser(String addvcd, Integer num) {}