diff --git a/3分钟搞定读写分离/springboot-duxiefenli/pom.xml b/3分钟搞定读写分离/springboot-duxiefenli/pom.xml
new file mode 100644
index 0000000..1b938a0
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/pom.xml
@@ -0,0 +1,127 @@
+
+
+ 4.0.0
+
+ com.woniu
+ springboot-multisource
+ 1.0.0-SNAPSHOT
+ jar
+
+ springboot-multisource
+ SpringBoot配置多数据源
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.4.RELEASE
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 1.1.2
+ 8.0.26
+ 2.1.8
+ 1.0.5
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ mysql
+ mysql-connector-java
+ ${mysql-connector.version}
+ runtime
+
+
+ com.alibaba
+ druid
+ ${druid.version}
+
+
+
+ com.baomidou
+ mybatis-plus
+ ${mybatis-plus.version}
+
+
+ com.baomidou
+ mybatisplus-spring-boot-starter
+ ${mybatisplus-spring-boot-starter.version}
+
+
+
+ io.shardingjdbc
+ sharding-jdbc-core
+ 2.0.3
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.hamcrest
+ hamcrest-all
+ 1.3
+ test
+
+
+ org.projectlombok
+ lombok
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.6.1
+
+
+ 1.8
+ 1.8
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.20
+
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+
+ src/main/resources
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
+
\ No newline at end of file
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/Application.java b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/Application.java
new file mode 100644
index 0000000..323fbc8
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/Application.java
@@ -0,0 +1,12 @@
+package com.woniu.pos;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/common/dao/entity/User.java b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/common/dao/entity/User.java
new file mode 100644
index 0000000..0ca1c67
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/common/dao/entity/User.java
@@ -0,0 +1,32 @@
+package com.woniu.pos.common.dao.entity;
+
+
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author 蜗牛
+ */
+@TableName(value = "t_user")
+@Data
+public class User implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 名字
+ */
+ private String name;
+
+
+}
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/common/dao/repository/UserMapper.java b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/common/dao/repository/UserMapper.java
new file mode 100644
index 0000000..6e04cbe
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/common/dao/repository/UserMapper.java
@@ -0,0 +1,13 @@
+package com.woniu.pos.common.dao.repository;
+
+import com.woniu.pos.common.dao.entity.User;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author 蜗牛
+ */
+@Mapper
+public interface UserMapper extends BaseMapper {
+
+}
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/config/ShardingDataSourceConfig.java b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/config/ShardingDataSourceConfig.java
new file mode 100644
index 0000000..3988fc1
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/config/ShardingDataSourceConfig.java
@@ -0,0 +1,46 @@
+package com.woniu.pos.config;
+
+
+import com.google.common.collect.Maps;
+import io.shardingjdbc.core.api.MasterSlaveDataSourceFactory;
+import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
+import lombok.extern.log4j.Log4j2;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Map;
+
+@Configuration
+@EnableConfigurationProperties(ShardingMasterSlaveConfig.class)
+@Slf4j
+// 读取ds_master主数据源和读写分离配置
+@ConditionalOnProperty({
+ "sharding.jdbc.data-sources.ds_master.jdbc-url",
+ "sharding.jdbc.master-slave-rule.master-data-source-name"
+})
+public class ShardingDataSourceConfig {
+
+ @Autowired
+ private ShardingMasterSlaveConfig shardingMasterSlaveConfig;
+
+ @Bean
+ public DataSource masterSlaveDataSource() throws SQLException {
+ final Map dataSourceMap = Maps.newHashMap();
+ dataSourceMap.putAll(shardingMasterSlaveConfig.getDataSources());
+ // 拿到主从配置
+ MasterSlaveRuleConfiguration masterSlaveRule = shardingMasterSlaveConfig.getMasterSlaveRule();
+ final Map newHashMap = Maps.newHashMap();
+ // 创建 MasterSlave数据源
+ DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap,
+ masterSlaveRule, newHashMap);
+ log.info("masterSlaveDataSource config complete");
+ return dataSource;
+ }
+
+}
\ No newline at end of file
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/config/ShardingMasterSlaveConfig.java b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/config/ShardingMasterSlaveConfig.java
new file mode 100644
index 0000000..d9c28a6
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/config/ShardingMasterSlaveConfig.java
@@ -0,0 +1,21 @@
+package com.woniu.pos.config;
+
+import com.zaxxer.hikari.HikariDataSource;
+import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+@Data
+@ConfigurationProperties(prefix = "sharding.jdbc")
+public class ShardingMasterSlaveConfig {
+
+ // 存放本地多个数据源
+ private Map dataSources = new HashMap<>();
+
+ private MasterSlaveRuleConfiguration masterSlaveRule;
+
+}
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/controller/TbUserController.java b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/controller/TbUserController.java
new file mode 100644
index 0000000..4c995f3
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/controller/TbUserController.java
@@ -0,0 +1,30 @@
+package com.woniu.pos.controller;
+
+import com.woniu.pos.common.dao.entity.User;
+import com.woniu.pos.common.dao.repository.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 3分钟搞定读写分离
+ */
+@RestController
+@RequestMapping("/user")
+public class TbUserController {
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @GetMapping("/userList")
+ public List selectUsers() {
+ return userMapper.selectList(null);
+ }
+
+ @PostMapping("/insertUser")
+ public void insertUser(@RequestBody User user) {
+ userMapper.insert(user);
+ }
+
+}
\ No newline at end of file
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/service/UserService.java b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/service/UserService.java
new file mode 100644
index 0000000..abc9ec7
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/java/com/woniu/pos/service/UserService.java
@@ -0,0 +1,63 @@
+package com.woniu.pos.service;
+
+import com.woniu.pos.common.dao.entity.User;
+import com.woniu.pos.common.dao.repository.UserMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+/**
+ * 后台用户管理
+ */
+
+@Service
+@Transactional
+public class UserService {
+
+ @Resource
+ private UserMapper userMapper;
+
+ /**
+ * 通过ID查找用户
+ * @param id
+ * @return
+ */
+ public User findById(Integer id) {
+ return userMapper.selectById(id);
+ }
+
+ /**
+ * 通过ID查找用户
+ * @param id
+ * @return
+ */
+ public User findById1(Integer id) {
+ return userMapper.selectById(id);
+ }
+
+ /**
+ * 新增用户
+ * @param user
+ */
+ public void insertUser(User user) {
+ userMapper.insert(user);
+ }
+
+ /**
+ * 修改用户
+ * @param user
+ */
+ public void updateUser(User user) {
+ userMapper.updateById(user);
+ }
+
+ /**
+ * 删除用户
+ * @param id
+ */
+ public void deleteUser(Integer id) {
+ userMapper.deleteById(id);
+ }
+
+}
diff --git a/3分钟搞定读写分离/springboot-duxiefenli/src/main/resources/application.yml b/3分钟搞定读写分离/springboot-duxiefenli/src/main/resources/application.yml
new file mode 100644
index 0000000..2df54da
--- /dev/null
+++ b/3分钟搞定读写分离/springboot-duxiefenli/src/main/resources/application.yml
@@ -0,0 +1,31 @@
+server:
+ port: 8080
+mybatis-plus:
+ mapper-locations: classpath*:/mapper/*.xml
+
+#shardingjdbc配置
+sharding:
+ jdbc:
+ data-sources:
+ ###配置第一个从数据库
+ ds_slave_0:
+ password: 123456
+ jdbc-url: jdbc:mysql://127.0.0.1:3306/ds2database?useUnicode=true&characterEncoding=utf-8&useSSL=false
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ ###主数据库配置
+ ds_master:
+ password: 123456
+ jdbc-url: jdbc:mysql://127.0.0.1:3306/ds1database?useUnicode=true&characterEncoding=utf-8&useSSL=false
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ ###配置读写分离
+ master-slave-rule:
+ ###配置从库选择策略,提供轮询与随机,这里选择用轮询
+ load-balance-algorithm-type: round_robin
+ ####指定主数据库
+ master-data-source-name: ds_master
+ ####指定从数据库
+ slave-data-source-names: ds_slave_0
+ ####读写分离名称,随便起。
+ name: ds_ms