分库分表(3) ---SpringBoot + ShardingSphere 实现读写分离
<h1 id="分库分表3---shardingsphere实现读写分离"><center>分库分表(3)---ShardingSphere实现读写分离 </center></h1><p>有关ShardingSphere概念前面写了两篇博客:</p>
<p>1、分库分表(1) --- 理论</p>
<p>2、 分库分表(2) --- ShardingSphere(理论)</p>
<p>下面就这个项目做个团体简单介绍,并在文章最下方附上项目<code>Github地址</code>。</p>
<h2 id="一项目概述"><font color=#FFD700> 一、项目概述 </font></h2>
<h4 id="技能架构">1、技能架构</h4>
<p>项目总体技能选型</p>
<code>SpringBoot2.0.6 + shardingsphere4.0.0-RC1 + Maven3.5.4+ MySQL + lombok(插件)</code>
<h4 id="项目阐明">2、项目阐明</h4>
<p><code>场景</code> 如果实际项目中Mysql是 <strong>Master-Slave</strong> (主从)摆设的,那么数据生存到Master库,Master库数据同步数据到Slave库,数据读取到Slave库,</p>
<p>如许可以减缓数据库的压力。</p>
<h4 id="数据库设计">3、数据库设计</h4>
<p>我们这个项目中Mysql服务器并没有实现主从摆设,而是同一个服务器创建两个库,一个当做Master库,一个当做Slave库。所以这里是不能实现的功能就是Master库</p>
<p>新增数据自动同步到Slave库。如许也更有利于我们测试看结果。</p>
<p><code>Master库</code></p>
<p><div align="center"></div></p>
<p><code>Slave库</code></p>
<p><div align="center"></div></p>
<p>从两幅图中可以看出,我这里在同一个服务器建两个数据库来模仿主从数据库。为了方便看测试结果,这里<code>主从数据库中的数据是不一样的</code>。</p>
<p><br></p>
<h2 id="二焦点代码"><font color=#FFD700>二、焦点代码 </font></h2>
<p><code>阐明</code> 完整的代码会放到GitHub上,这里只放一些焦点代码。</p>
<h4 id="pom.xml">1、pom.xml</h4>
<code> <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></code>
<h4 id="application.properties">2、application.properties</h4>
<code>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
</code>
<p>Sharding-JDBC可以通过<code>Java</code>,<code>YAML</code>,<code>Spring定名空间</code>和<code>Spring Boot Starter</code>四种方式设置,开发者可根据场景选择适合的设置方式。详细可以看官网。</p>
<h4 id="usercontroller">3、UserController</h4>
<code>@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();
}
}</code>
<p><br></p>
<h2 id="三测试验证"><font color=#FFD700>三、测试验证 </font></h2>
<h4 id="读数据">1、读数据</h4>
<p><div align="center"></div></p>
<p>我们可以发现读取的数据是Slave库的数据。我们再来看控制台打印的SQL。可以看到读操作是Slave库。</p>
<p><div align="center"></div></p>
<h4 id="写数据">2、写数据</h4>
<p><code>哀求</code></p>
<code>localhost:8088/save-user?name=小小&sex=女&age=3</code>
<p><strong>查看Mater数据库</strong></p>
<p><div align="center"></div></p>
<p>发现Master数据库已经多了一条数据了,再看控制台打印的SQL。</p>
<p><div align="center"></div></p>
<p>这个时间如果去看Slave库的话这条新增的数据是没有的,由于没有同步已往。</p>
<p><code>Github地址</code>:https://github.com/yudiandemingzi/spring-boot-sharding-sphere<br />
<br></p>
<h3 id="参考"><font color=#FFD700> 参考</font></h3>
<p>1、ShardingSphere中文文档</p>
<p>2、ShardingSphere官网</p>
<p>3、Shardingsphere Github库<br />
<br><br />
<br></p>
<code> 我信赖,无论今后的门路多么崎岖,只要捉住本日,迟早会在奋斗中尝到人生的甘甜。捉住人生中的一分一秒,胜过虚度中的一月一年!(18)</code>
<p><br></p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/qdhxhz/p/11656205.html" target="_blank">https://www.cnblogs.com/qdhxhz/p/11656205.html</a>
页:
[1]