今天自己整了一下springboot+druid+mybatisplus+sharding-jdbc读写分离,遇到的一些坑及解决办法

1、导入pom.xml依赖

org.springframework.boot spring-boot-starter-parent 2.7.5 com.itcast rw 0.0.1-SNAPSHOT rw Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test junit junit test mysql mysql-connector-java runtime com.alibaba druid 1.1.20 com.baomidou mybatis-plus-boot-starter 3.3.1.tmp org.projectlombok lombok true org.apache.shardingsphere sharding-jdbc-spring-boot-starter 4.0.0 com.alibaba fastjson 1.2.76 org.springframework.boot spring-boot-maven-plugin

坑1:引用了sharding-jdbc-spring=boot-starter包,那么druid 不能用spring-boot-starter版本,只能是普通版本的包,不然启动会报错,找不到url坑2:sharding-jdbc包版本好像和mybatisplus的版本有冲突,项目页启动不了,经过测试,mybatisplus版本选择(3.3.1.tmp / 3.4.0),sharding版本选择4.0.0就不会出现这样的问题 2、配置application.yml

server: port: 6080spring: # environment: dev application: name: rw # 服务名称 shardingsphere: props: sql: show: true # 开启显示sql sharding: default-data-source-name: master masterslave: name: ms master-data-source-name: master slave-data-source-names: slave load-balance-algorithm-type: round_robin datasource: # 数据源名称,名称自定义,需要与后面配置的一一对应,可以多个,以英文逗号分割 names: master,slave master: # 采用 druid 数据库连接池 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.1.1:3306/itcast?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: admin1234 initialSize: 5 # 初始化连接池数量 minIdle: 5 # 最小空闲连接池 minPoolSize: 5 # 最小连接数量 maxPoolSize: 20 # 最大连数量 maxWait: 60000 slave: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.1.2:3306/itcast?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: admin1234 initialSize: 5 minIdle: 5 minPoolSize: 5 maxPoolSize: 20 maxWait: 60000 main: allow-bean-definition-overriding: truesharding: jdbc: config: masterslave: load-balance-algorithm-type: randommybatis-plus: datasource: dataSource type-aliases-package: com.itcast.entity configuration: #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射 实体类属性名:idNumber -> 数据库字段名:id_number map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: AUTO table-prefix: tb_

3、创建实体类、controller、mapper、service

@Datapublic class User implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String name; private Integer age; private String address;}#-------------@RestController@RequestMapping("/user")public class UserController { @Autowired private UserService userService; @PostMapping("/add") public String add(@RequestBody User user){ userService.save(user); return "0"; } @GetMapping("/list") public List list(){ List userList = userService.list(); return userList; }}#-------------@Mapperpublic interface UserDao extends BaseMapper {}#-------------public interface UserService extends IService {}#-------------@Servicepublic class UserServiceImpl extends ServiceImpl implements UserService {}

4、启动项目,测试 查询
新增

参考文档:https://www.jianshu.com/p/ed7bc1e49b61