创建实体类、添加repository、添加配置信息、添加测试类等
目前就用city表进行操作,那么只需要对配置信息、测试类进行操作即可。

1、创建新的配置文件、并指向之

在resource下面创建application-master-slave.properties文件,然后主配置指向新配置
image.png

2、添加配置信息

主要是这个主从配置信息
image.png

  1. ######datasource(数据源,有两个库)#######
  2. spring.shardingsphere.datasource.names=master,slave0
  3. ######配置第一个库是主节点#######
  4. #使用连接池
  5. spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource
  6. #使用驱动
  7. spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver
  8. #数据库连接(如果是服务器的就只需要把localhost改为服务器的ip即可)
  9. spring.shardingsphere.datasource.master.jdbc-url=jdbc:mysql://localhost:3306/lagou1
  10. #数据库用户和密码
  11. spring.shardingsphere.datasource.master.username=root
  12. spring.shardingsphere.datasource.master.password=root
  13. ######配置第二个库是从节点#######
  14. spring.shardingsphere.datasource.slave0.type=com.zaxxer.hikari.HikariDataSource
  15. spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver
  16. spring.shardingsphere.datasource.slave0.jdbc-url=jdbc:mysql://localhost:3306/lagou2
  17. spring.shardingsphere.datasource.slave0.username=root
  18. spring.shardingsphere.datasource.slave0.password=root
  19. ########master、slave的配置
  20. spring.shardingsphere.masterslave.name=dataSource
  21. #指定谁是主库
  22. spring.shardingsphere.masterslave.master-data-source-name=master
  23. #指定谁是从库
  24. spring.shardingsphere.masterslave.slave-data-source-names=slave0
  25. #如果是多个从库,则需要负载均衡吗,可以是轮询、也可以是随机
  26. spring.shardingsphere.masterslave.load-balance-algorithm-type=ROUND_ROBIN
  27. #配置city的id主键,采用雪花片算法
  28. spring.shardingsphere.sharding.tables.city.key-generator.column=id
  29. spring.shardingsphere.sharding.tables.city.key-generator.type=SNOWFLAKE

3、实现对主库操作的测试

  1. package com.slin.test;
  2. import com.slin.RunBoot;
  3. import com.slin.entity.City;
  4. import com.slin.repository.CityRepository;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. import javax.annotation.Resource;
  10. //通过它来启动
  11. @RunWith(SpringRunner.class)
  12. //通过RunBoot来创建boot容器
  13. @SpringBootTest(classes = RunBoot.class)
  14. public class MasterSlaveSardingTest {
  15. @Resource
  16. private CityRepository cityRepository;
  17. // 对主库是写操作
  18. @Test
  19. public void masterTest(){
  20. City city = new City();
  21. city.setName("nanning");
  22. city.setProvince("guangxi");
  23. cityRepository.save(city);
  24. }
  25. }

4、效果展示

主库lagou1有记录。说明入主库成功
image.png
从库lagou2没有记录
image.png

5、实现对从库操作的测试

  1. package com.slin.test;
  2. import com.slin.RunBoot;
  3. import com.slin.entity.City;
  4. import com.slin.repository.CityRepository;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. import javax.annotation.Resource;
  10. import java.util.List;
  11. //通过它来启动
  12. @RunWith(SpringRunner.class)
  13. //通过RunBoot来创建boot容器
  14. @SpringBootTest(classes = RunBoot.class)
  15. public class MasterSlaveSardingTest {
  16. @Resource
  17. private CityRepository cityRepository;
  18. // 对从库是读操作
  19. @Test
  20. public void slaveTest(){
  21. List<City> all = cityRepository.findAll();
  22. System.out.println("###########开始打印##############");
  23. all.forEach(city->{
  24. System.out.println(city.getId()+" "+city.getName()+" "+city.getProvince());
  25. });
  26. System.out.println("&&&&&&&&&&&end打印&&&&&&&&&&&&");
  27. }
  28. }

6、效果展示

结果是从从库里面查询出来的,说明查询从库成功
image.png
从库只有一条记录
image.png