springboot集成shardingsphere-jdbc之读写分离配置

本文介绍了如何在Spring Boot项目中使用Docker和ShardingSphere搭建MySQL主从复制环境,包括配置数据源、事务管理及读写分离策略。通过实例展示了主从数据库的配置和事务协调方法。

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

关于MySQL主从搭建,可以参考我的文章学习docker第五天之MySQL主从复制搭建_Husky_jzq的博客-优快云博客

首先导入相关的pom依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.0</version>
        </dependency>


        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.22</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

导入依赖后配置shardingsphere-jdbc的yml文件

spring:
  shardingsphere:
    # 数据源配置
    datasource:
      # 数据源名称,多数据源以逗号分隔
      names: master,slave
      master:
        # 数据库连接池类名称
        type: com.zaxxer.hikari.HikariDataSource
        # 数据库驱动类名
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
      slave:
        # 数据库连接池类名称
        type: com.zaxxer.hikari.HikariDataSource
        # 数据库驱动类名
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
    # 规则配置
    rules:
      readwrite-splitting:
        load-balancers:
          ms:
            type: ROUND_ROBIN
            props:
              workId: 1
        data-sources:
          ms:
            type: Static
            load-balancer-name: round-robin
            props:
              write-data-source-name: master
              read-data-source-names: slave
    # 属性配置
    props:
      # 展示修改以后的sql语句
      sql-show: true
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

然后测试读写情况,读是在slave,写是在master

 

 至此,读写分离集成成功!

笔者此次读写分离是一主一从,既然读写分离就涉及事务问题。在配置成功后发现使用事务失败@Transactional。基于之前项目配置过一次双数据源和本次读写分离的形式,笔者认为,既然是一主一从,按理说只需要指定主库进行事务即可(因为从库会同步主库)。所以在进行相关查阅后,进行事务管理器的配置,指定@Transactional的事务为主库事务即可。相关配置如下:

 

 进过测试,事务成功

 主库数据

 从库数据

 

<think>好的,我现在需要帮助用户解决在SpringBoot项目中整合ShardingSphere-JDBC-Core5.2.1版本的问题。首先,我需要回顾用户提供的信息和之前的引用内容。用户之前提到的引用是关于SpringBoot集成Sharding-JDBC实现读写分离的测试代码,其中包含了JUnit测试用例,使用@Autowired注入了IUserService,并进行了查询操作。这可能涉及到数据源配置和分片策略的设置。不过用户现在需要的是具体的整合教程或示例代码,特别是针对5.2.1版本。首先,我需要确定ShardingSphere-JDBC在5.2.1版本的配置方式是否有变化。根据ShardingSphere的文档,5.x版本相比4.x有一些配置上的调整,比如数据源配置格式和规则定义。因此,正确的配置步骤是关键。接下来,用户可能需要知道如何添加Maven依赖。因为版本不同,依赖的groupId和artifactId可能有变化。ShardingSphere从5.x开始,groupId改为org.apache.shardingsphere,所以需要确认用户是否正确引入依赖。然后,配置数据源。在SpringBoot中,通常通过application.yml或application.properties来配置数据源和分片规则。需要指导用户如何配置主从数据源,读写分离规则,以及可能的其他分片策略。例如,在application.yml中定义数据源名称,主库和从库的连接信息,以及设置读写分离的负载均衡算法。接着,需要处理事务管理器。ShardingSphere-JDBC需要覆盖默认的事务管理器,使用ShardingTransactionManager,这可能涉及到配置类中的Bean定义。此外,用户可能需要进行测试,编写类似之前引用中的测试代码,验证读写分离是否生效。例如,插入数据到主库,然后查询是否从从库读取,或者检查日志确认数据源切换。需要注意的是,用户提供的引用中的代码使用了IUserService和User实体,这可能涉及到MyBatis或JPA的集成。因此,在整合ShardingSphere时,需要确保ORM框架的配置正确,比如MyBatis的Mapper扫描路径或JPA的实体管理。还要考虑版本兼容性问题,SpringBoot的版本是否与ShardingSphere-JDBC5.2.1兼容。例如,SpringBoot2.5.x或2.6.x可能需要不同的依赖管理,或者需要排除某些自动配置。最后,用户可能遇到的常见问题,比如数据源未正确加载、分片规则不生效、事务管理问题等,需要给出排查建议,比如检查配置格式、日志级别设置等。总结步骤应该是:添加依赖→配置数据源和规则→配置事务管理器→编写业务代码和测试。同时,提供示例代码片段和配置示例,确保用户能够逐步操作。可能还需要提醒用户注意版本匹配和配置细节,避免常见的配置错误。</think> 以下是在SpringBoot项目中整合ShardingSphere-JDBC-Core 5.2.1版本的完整教程: ### 一、环境准备 1. SpringBoot建议使用2.6.x/2.7.x版本 2. 数据库驱动与连接池(推荐HikariCP) 3. 确保数据库主从架构已搭建完成 ### 二、Maven依赖配置 ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.2.1</version> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>4.0.3</version> </dependency> ``` ### 三、配置文件示例(application.yml) ```yaml spring: shardingsphere: datasource: names: master,slave0 master: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://master-host:3306/db username: root password: master-pwd slave0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://slave-host:3306/db username: root password: slave-pwd rules: readwrite-splitting: data-sources: rw-ds: write-data-source-name: master read-data-source-names: slave0 load-balancer-name: round_robin load-balancers: round_robin: type: ROUND_ROBIN props: sql-show: true ``` ### 四、事务管理器配置类 ```java @Configuration public class TransactionConfig { @Autowired private DataSource dataSource; @Bean public PlatformTransactionManager transactionManager() { return new ShardingSphereTransactionManager(dataSource); } } ``` ### 五、读写分离测试示例 ```java @SpringBootTest @Slf4j public class ReadWriteTest { @Autowired private UserMapper userMapper; // 写操作测试 @Test @Transactional public void testWrite() { User user = new User(); user.setUsername("test_user"); userMapper.insert(user); // 该操作会路由到主库 } // 读操作测试 @Test public void testRead() { List<User> users = userMapper.selectList(null); // 该操作会路由到从库 log.info("查询结果: {}", users); } } ``` ### 六、验证关键点
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值