springboot mybatis-plus 多数据源配置(HikariCP)

文章介绍了如何在SpringBoot应用中配置多个数据源,包括引入相关依赖、配置Nacos或本地YML文件中的数据库信息,以及如何使用@DS注解在代码中选择数据源。特别指出,@DS注解可以在ServiceImpl或Mapper上使用,用于指定数据源,方法上的注解优先级高于类上的注解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.导入依赖jar

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.5</version>
        </dependency>
        <dependency>
            <groupId>net.postgis</groupId>
            <artifactId>postgis-jdbc</artifactId>
            <version>2.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!--多数据源-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

2.配置nacos或者本地yml数据库信息

spring:
   # 配置数据源信息
  datasource:
    dynamic:
      #设置默认的数据源或者数据源组,默认值即为master
      primary: master
      strict: true
      datasource:
        #这里采用了配置文件取值的方式,可以直接替换为数据库连接
        master:
          url: jdbc:postgresql://127.0.0.1:1921/check_db
          username: root
          password: 123456
          driver-class-name: org.postgresql.Driver
          # 数据源2
        secondary:
          url: jdbc:postgresql://127.0.0.2:1921/check_db
          username: root
          password: 123456
          driver-class-name: org.postgresql.Driver
    hikari:
      #连接池名
      pool-name: MyHikariCP
      #最小空闲数
      minimum-idle: 5
      #连接池最大数 默认是10
      maximum-pool-size: 100
      #空闲连接存活最大时间 默认:60000(10分钟)
      idle-timeout: 60000
      #此属性控制池中的最长生命周期,0: 表示无限生命周期,默认为1800000(30分钟)
      max-lifetime: 1800000
      #数据库连接超时时间默认30秒(30000)
      connection-timeout: 60000
       #此属性控制从池返回的链接默认自动提交行为,默认为true
      auto-commit: true

3.代码使用说明:@DS注解

  注意: 1. @DS注解支持ServiceImpl,或者mapper上,暂不支持Service接口上的@DS注解

              2. 注解加到ServiceImpl类上 --> 类里的方法都使用此数据源

             3. 不加@DS注解,使用默认数据源,默认值master数据源(对于已有代码无感知使用mater库)

可以注解在方法上或类上,同时存在就近原则 【方法上注解】 优先于 【类上注解】

 此时使用secondary从库进行数据操作:

虽然service类使用了mater 主库,但是getReportByTaskId 方法使用了 @DS("secondary")  ,根据方法上使用的数据源优先级高于其他一切配置原则,该方法使用了从库进行数据操作。

3.验证结果:

一样的参数,数据源1,查询结果 :

一样的参数,数据源2,查询结果 :

<think>好的,我现在需要帮助用户了解如何在Spring Boot项目中使用MyBatis-Plus和Hikari配置多数据源。根据用户提供的引用内容,我需要整理出配置步骤和注意事项。首先,用户提到了dynamic-datasource-spring-boot-starter这个依赖,所以第一步应该是添加相关的Maven依赖。然后,配置数据源信息,这里需要注意Hikari的连接池设置,因为在引用4中提到必须指定type为HikariDataSource,否则可能会使用Druid,导致问题。接下来是配置MyBatis-Plus,可能需要设置mapper接口的位置和分页插件,引用3提到这种配置方式便于管理不同数据源。然后,用户可能需要手动切换数据源,引用2和4提到了使用@DS注解或者在代码中手动切换。另外,读写分离的配置也是一个点,引用4中的MasterSlaveAutoRoutingPlugin需要被创建为Bean。日志配置也很重要,方便调试。最后,测试验证部分需要确保不同数据源的操作正确,可能通过单元测试或者实际调用。需要提醒用户注意依赖冲突,尤其是Hikari和Druid的版本问题,以及在事务管理中数据源切换的限制。这些步骤应该能帮助用户完成多数据源配置。现在需要将这些整理成结构清晰的教程,并给出示例代码,同时生成相关问题。</think>以下是在Spring Boot项目中整合MyBatis-PlusHikariCP实现多数据源配置教程,结合官方文档和最佳实践总结: ### 一、添加依赖 ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.6.1</version> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency> ``` ### 二、配置数据源 ```yaml spring: datasource: dynamic: primary: master # 设置默认数据源 strict: false hikari: connection-timeout: 30000 maximum-pool-size: 15 datasource: master: url: jdbc:mysql://localhost:3306/master_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource # 必须显式指定[^4] slave1: url: jdbc:mysql://localhost:3306/slave1_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource ``` ### 三、配置MyBatis-Plus ```java @Configuration @MapperScan(basePackages = "com.example.mapper.*") public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` ### 四、数据源切换 1. **注解方式**(自动切换): ```java @Service public class UserServiceImpl { @DS("master") // 指定数据源 public void addUser(User user) { // 主库操作 } @DS("slave1") public User getUser(Long id) { // 从库查询 } } ``` 2. **手动切换**: ```java DynamicDataSourceContextHolder.push("slave1"); // 切换数据源 try { // 执行数据库操作 } finally { DynamicDataSourceContextHolder.poll(); } ``` ### 五、读写分离配置(可选) ```java @Bean public MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin() { return new MasterSlaveAutoRoutingPlugin(); } ``` ### 六、日志配置 ```yaml logging: level: com.baomidou.dynamic: debug ``` ### 七、测试验证 ```java @SpringBootTest class DataSourceTests { @Autowired private UserMapper userMapper; @Test @DS("slave1") void testSlaveQuery() { User user = userMapper.selectById(1L); Assert.notNull(user, "查询失败"); } } ``` **注意事项**: 1. 避免同时使用其他数据源组件(如Druid)造成冲突[^4] 2. 事务中切换数据源需使用`@DSTransactional`注解 3. Hikari连接池参数应根据实际压力调整 4. 不同数据源的数据库表结构应保持一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值