有關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)