有关ShardingSphere概念前面写了两篇博客:html
一、分库分表(1) --- 理论java
二、 分库分表(2) --- ShardingSphere(理论)mysql
下面就这个项目作个总体简单介绍,并在文章最下方附上项目Github地址
。git
项目整体技术选型github
SpringBoot2.0.6 + shardingsphere4.0.0-RC1 + Maven3.5.4 + MySQL + lombok(插件)
场景
若是实际项目中Mysql是 Master-Slave (主从)部署的,那么数据保存到Master库,Master库数据同步数据到Slave库,数据读取到Slave库,web
这样能够减缓数据库的压力。spring
咱们这个项目中Mysql服务器并无实现主从部署,而是同一个服务器创建两个库,一个当作Master库,一个当作Slave库。因此这里是不能实现的功能就是Master库sql
新增数据主动同步到Slave库。这样也更有利于咱们测试看效果。数据库
Master库
apache
Slave库
从两幅图中能够看出,我这里在同一个服务器建两个数据库来模拟主从数据库。为了方便看测试效果,这里主从数据库中的数据是不同的
。
说明
完整的代码会放到GitHub上,这里只放一些核心代码。
<properties> <java.version>1.8</java.version> <mybatis-spring-boot>2.0.1</mybatis-spring-boot> <druid>1.1.16</druid> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <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>${mybatis-spring-boot}</version> </dependency> <!--mybatis驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--druid数据源--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid}</version> </dependency> <!--shardingsphere最新版本--> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> </dependency> <!--lombok实体工具--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
server.port=8088 #指定mybatis信息 mybatis.config-location=classpath:mybatis-config.xml spring.shardingsphere.datasource.names=master,slave0 # 数据源 主库 spring.shardingsphere.datasource.master.type=com.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver spring.shardingsphere.datasource.master.url=jdbc:mysql://localhost:3306/master?characterEncoding=utf-8 spring.shardingsphere.datasource.master.username=root spring.shardingsphere.datasource.master.password=123456 # 数据源 从库 spring.shardingsphere.datasource.slave0.type=com.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver spring.shardingsphere.datasource.slave0.url=jdbc:mysql://localhost:3306/slave?characterEncoding=utf-8 spring.shardingsphere.datasource.slave0.username=root spring.shardingsphere.datasource.slave0.password=123456 # 读写分离 spring.shardingsphere.masterslave.load-balance-algorithm-type=round_robin spring.shardingsphere.masterslave.name=ms spring.shardingsphere.masterslave.master-data-source-name=master spring.shardingsphere.masterslave.slave-data-source-names=slave0 #打印sql spring.shardingsphere.props.sql.show=true
Sharding-JDBC能够经过Java
,YAML
,Spring命名空间
和Spring Boot Starter
四种方式配置,开发者可根据场景选择适合的配置方式。具体能够看官网。
@RestController public class UserController { @Autowired private UserService userService; /** * @Description: 保存用户 */ @PostMapping("save-user") public Object saveUser() { return userService.saveOne(new User("小小", "女", 3)); } /** * @Description: 获取用户列表 */ @GetMapping("list-user") public Object listUser() { return userService.list(); } }
咱们能够发现读取的数据是Slave库的数据。咱们再来看控制台打印的SQL。能够看到读操做是Slave库。
请求
localhost:8088/save-user?name=小小&sex=女&age=3
查看Mater数据库
发现Master数据库已经多了一条数据了,再看控制台打印的SQL。
这个时候若是去看Slave库的话这条新增的数据是没有的,由于没有同步过去。
Github地址
:https://github.com/yudiandemingzi/spring-boot-sharding-sphere
我相信,不管从此的道路多么坎坷,只要抓住今天,早晚会在奋斗中尝到人生的甘甜。抓住人生中的一分一秒,赛过虚度中的一月一年!(18)