• SpringBoot整合Mybatisplus配置多数据源


    今天我们分享多数据源的另外一直方式,SpringBoot整合Mybatisplus配置多数据源,此种方式配置相对简单,都是封装好的API,上手容易;底层原理也是继承 AbstractRoutingDataSource等相关类,只是封装更好一些,开箱即用,少走弯路!此篇我们分享业务比较简单的方式配置数据源,既多个固定的数据源,通过注解选择使用哪个数据源!废话少说,切入正题。

    1、相关核心包引入

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-web</artifactId>
    4. </dependency>
    5. <dependency>
    6. <groupId>com.baomidou</groupId>
    7. <artifactId>mybatis-plus-boot-starter</artifactId>
    8. <version>3.5.0</version>
    9. </dependency>
    10. <dependency>
    11. <groupId>com.baomidou</groupId>
    12. <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    13. <version>3.5.0</version>
    14. </dependency>
    15. <dependency>
    16. <groupId>mysql</groupId>
    17. <artifactId>mysql-connector-java</artifactId>
    18. <scope>runtime</scope>
    19. </dependency>
    20. <dependency>
    21. <groupId>com.alibaba</groupId>
    22. <artifactId>druid-spring-boot-starter</artifactId>
    23. <version>1.1.20</version>
    24. </dependency>

    2、相关数据源yml 配置:

    1. server:
    2. port: 8000
    3. spring:
    4. datasource:
    5. dynamic:
    6. primary: master# 配置默认数据库,及没有注解指定时走的数据库
    7. #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
    8. strict: false
    9. datasource:
    10. master: # 数据源1配置
    11. url: jdbc:mysql://localhost:3306/user_db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
    12. username: root
    13. password: root
    14. driver-class-name: com.mysql.cj.jdbc.Driver
    15. slave: # 数据源2配置
    16. url: jdbc:mysql://localhost:3306/user_db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
    17. username: root
    18. password: root
    19. driver-class-name: com.mysql.cj.jdbc.Driver
    20. durid:
    21. initial-size: 1
    22. max-active: 20
    23. min-idle: 1
    24. max-wait: 60000
    25. autoconfigure:
    26. exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid自动加载的配置,也可以在启动类里添加

    3、启动类配置:

    1. //去掉自动加载数据源的配置类
    2. @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
    3. public class TestApplication {
    4. public static void main(String[] args) {
    5. SpringApplication.run(TestApplication.class, args);
    6. }
    7. }

    释疑:服务启动时DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,其会在原生的spring.datasource下找 url, username, password 等信息。动态数据源 URL 等配置是在 dynamic 下,因此需要排除,否则会报错。

    排除方式有两种,一种是上述配置文件排除,还有一种可以在项目启动类排除,上面已经演示!

    4、样例注解配置演示:

    使用@DS指定数据源,给使用非默认数据源添加注解@DS,比如@DS("slave"),如果不加或者加@DS("master"),就会走默认数据源;@DS可以注解在 方法 上和 类 上,同时存在方法注解优先于类上注解;注解在 controller层、service 实现或 mapper 接口方法上,不要同时在 service 和 mapper 注解;官方强烈建议加在service上,主要要保证事务!

    4.1、mapper层

    1. @DS("slave")
    2. public interface UserInfoMapper extends BaseMapper<User> {
    3. }

    4.2、service层

    1. @Service
    2. @DS("slave")
    3. public class UserServiceImpl extends ServiceImpl, Model> implements IUserService {}

    4.3、controller层

    1. @RestController
    2. @RequestMapping("/exportTest")
    3. @DS("slave")
    4. public class MyTestController {
    5. ..........省略
    6. }

    4.4、方法上:

    1. @Select("SELECT * FROM userInfo")
    2. @DS("slave")
    3. List selectAll();

    如果遇到事务问题可参考:多数据源事务相关问题

    到此,基本操作分享完毕,也是可以直接使用的,大家可以详细测试验证一下,定会收获很多!下篇我们分享根据用户完全动态获取数据源,实战性更强,敬请期待!

  • 相关阅读:
    新变化新营销 这些知识点你得 Get!(文末有 PPT 福利首次放送)
    全国电费优惠接口CPS分享
    Electron:菜单
    maple中,如果一个函数的表达式有两个中含有rootof和_z要怎么画出他的图像呢?
    [JAVAee]Spring拦截器
    java面试题总结3
    spring的自动装配
    Django实现音乐网站 ⒆
    游游的字母串 (环形数组两点之间的位置)
    成都链安xFootprint 2022 Web3 安全研报
  • 原文地址:https://blog.csdn.net/nandao158/article/details/128140132