查看从服务器状态
show slave status\G;
至此数据库层面主从配置完成。
SpringBoot中配置主从读写分离
在主从模式下请遵守如下规则:
主数据库 只执行 INSERT,UPDATE,DELETE 操作
从数据库 只执行SELECT操作
我们这里使用开源项目[dynamic-datasource-spring-boot-starter](https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter/wikis/)作为读写分离的工具包
使用方法
在mydb主数据库中建立一个简单数据表user,建好后从数据库会自动同步
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `account` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `position` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
引入相关依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </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> </dependencies>
配置数据源
spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #设置严格模式,默认false不启动. 启动后再为匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: master: type: com.zaxxer.hikari.HikariDataSource url: jdbc:mysql://192.168.249.131:3306/mydb?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false username: root password: '000000' driver-class-name: com.mysql.cj.jdbc.Driver slave_1: type: com.zaxxer.hikari.HikariDataSource url: jdbc:mysql://192.168.249.129:3306/mydb?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false username: root password: '000000' driver-class-name: com.mysql.cj.jdbc.Driver
在启动类入口加入mybatis扫描包
@SpringBootApplication@MapperScan("com.jianzh5.dynamic.mapper") public class DynamicDatsourceBootstrap { public static void main(String[] args) { SpringApplication.run(DynamicDatsourceBootstrap.class, args); } }
建立实体类User
@Data public class User { private int id; private String account; private String name; private String position; }
建立mapper接口文件,新增两个方法addUser(User user),getById(int id)
public interface UserDao { @Insert("INSERT INTO user(account, name, position) VALUES(#{account}, #{name}, #{position})") @Options(useGeneratedKeys = true,keyProperty = "id") int addUser(User user); @Select("SELECT * FROM user WHERE id = #{id}") User getById(int id); }
建立Service服务层相关实现
public interface UserService { int addUser(User user); User getById(int id); } @Service public class UserServiceImpl implements UserService { @Resource private UserDao userDao; @Override public int addUser(User user) { return userDao.addUser(user); } @DS("slave") @Override public User getById(int id) { return userDao.getById(id); } }
由于在数据源中配置了primary: master,默认操作都会从主库执行,使用注解@DS切换数据源,此注解也可直接用于类文件上,同时存在方法注解优先于类上注解。
编写单元测试进行测试
public class UserServiceTest extends DynamicDatsourceBootstrapTests { @Autowired private UserService userService; @Test public void testAddUser(){ User user = new User(); user.setName("李四"); user.setAccount("sili"); user.setPosition("JAVA开发工程师"); int i = userService.addUser(user); System.out.println(user); } @Test public void testGetById(){ int id = 4; User user = userService.getById(id); Assert.assertEquals("sanzhang",user.getAccount()); } }
通过观察执行日志,发现读写数据库会根据@DS注解进行切换,至此Springboot集成数据库主从读写分离完成。
总结
以上所述是小编给大家介绍的Springboot + Mysql8实现读写分离功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
更多Mysql内容来自木庄网络博客
标签:Mysql
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。