点击上方蓝色字体关注公众号
目录
01-简介
02-依赖
03-配置
04-测试
01
简介
我的项目用的ORM框架是mybatis+mybatis-plus,而恰巧mybatis-plus可以满足我的需求(读写分离或者叫多数据源),所以这里就直接引入mybatis-plus的多数据源包
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><!-- 目前官方的最高版本是3.3.2 --><version>3.3.2</version></dependency>
03
配置
yml格式
Spring:datasource:dynamic:primary: master #设置默认的数据源或者数据源组,默认值即为masterstrict: true #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.datasource:master:url: jdbc:mysql://localhost:33061/master_slave_database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=trueusername: rootpassword: root1234driver-class-name: com.mysql.cj.jdbc.Driverslave_1:url: jdbc:mysql://localhost:33062/master_slave_database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=trueusername: rootpassword: root1234driver-class-name: com.mysql.cj.jdbc.Driver
properties格式
Spring.datasource.dynamic.primary=masterSpring.datasource.dynamic.strict=trueSpring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:33061/master_slave_database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=trueSpring.datasource.dynamic.datasource.master.username=rootSpring.datasource.dynamic.datasource.master.password=root1234Spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.DriverSpring.datasource.dynamic.datasource.slave_1.url=jdbc:mysql://localhost:33062/master_slave_database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=trueSpring.datasource.dynamic.datasource.slave_1.username=rootSpring.datasource.dynamic.datasource.slave_1.password=root1234Spring.datasource.dynamic.datasource.slave_1.driver-class-name=com.mysql.cj.jdbc.Driver
04
测试
Service层代码
@Servicepublic class UserService extends ServiceImpl<UserMapper, User> {public boolean insert(User user) {return save(user);}@DS(value = "slave_1")public List<User> findAll() {return list();}}
TestApplication
新增
@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)public class TestApplication {@Resourceprivate UserService userService;@Testpublic void testMasterSlave_Insert() {User user = new User();user.setName("小王");user.setPhone("17621298033");user.setSex("男");user.setAddress("浦东");boolean save = userService.insert(user);System.err.println(save);}}
2021-03-26 16:32:05,309 DEBUG [main] c.j.m.m.U.insert [BaseJdbcLogger.java:137] - ==> Preparing: INSERT INTO user ( id, name, sex, phone, address ) VALUES ( ?, ?, ?, ?, ? )2021-03-26 16:32:05,790 DEBUG [main] c.j.m.m.U.insert [BaseJdbcLogger.java:137] - ==> Parameters: 1375364922683375617(Long), 小王(String), 男(String), 17621298033(String), 浦东(String)2021-03-26 16:32:05,807 DEBUG [main] c.j.m.m.U.insert [BaseJdbcLogger.java:137] - <== Updates: 1
查询
查询之前,我们把从库中刚新增的这条数据的name改个名,改成从库名称,因为从库的数据是从主库读来的,那我们调用查询接口的时候怎么才能知道查来的数据是主库的还是从库的
@Testpublic void testMasterSlave_findAll() {List<User> list = userService.findAll();System.out.println(list);}
2021-03-26 16:47:50,068 DEBUG [main] c.j.m.m.U.selectList [BaseJdbcLogger.java:137] - ==> Preparing: SELECT id,name,sex,phone,address FROM user2021-03-26 16:47:50,526 DEBUG [main] c.j.m.m.U.selectList [BaseJdbcLogger.java:137] - ==> Parameters:2021-03-26 16:47:50,887 DEBUG [main] c.j.m.m.U.selectList [BaseJdbcLogger.java:137] - <== Total: 1[User(id=1375364922683375617, name=从库名称, sex=男, phone=17621298033, address=浦东)]

文章转载自程序员舒克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




