1、概念
2、Sharding-Jdbc与Mycat的区别

3、读写分离原理

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0-beta</version></dependency><dependency><groupId>io.shardingjdbc</groupId><artifactId>sharding-jdbc-core</artifactId><version>2.0.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
mybatis-plus:# mapper-locations: classpath*:/mapper/*.xmlglobal-config:db-config:column-underline: true#shardingjdbc配置sharding:jdbc:data-sources:###配置第一个从数据库ds_slave_0:password: rootjdbc-url: jdbc:mysql://192.168.212.203:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=truedriver-class-name: com.mysql.jdbc.Driverusername: root###主数据库配置ds_master:password: rootjdbc-url: jdbc:mysql://192.168.212.202:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=truedriver-class-name: com.mysql.jdbc.Driverusername: root###配置读写分离master-slave-rule:###配置从库选择策略,提供轮询与随机,这里选择用轮询load-balance-algorithm-type: round_robin####指定从数据库slave-data-source-names: ds_slave_0name: ds_ms####指定主数据库master-data-source-name: ds_master
@Data@ConfigurationProperties(prefix = "sharding.jdbc")public class ShardingMasterSlaveConfig {// 存放本地多个数据源private Map<String, HikariDataSource> dataSources = new HashMap<>();private MasterSlaveRuleConfiguration masterSlaveRule;}
@Configuration@EnableConfigurationProperties(ShardingMasterSlaveConfig.class)@Log4j2// 读取ds_master主数据源和读写分离配置@ConditionalOnProperty({ "sharding.jdbc.data-sources.ds_master.jdbc-url","sharding.jdbc.master-slave-rule.master-data-source-name" })public class ShardingDataSourceConfig {@Autowiredprivate ShardingMasterSlaveConfig shardingMasterSlaveConfig;@Beanpublic DataSource masterSlaveDataSource() throws SQLException {final Map<String, DataSource> dataSourceMap = Maps.newHashMap();dataSourceMap.putAll(shardingMasterSlaveConfig.getDataSources());final Map<String, Object> newHashMap = Maps.newHashMap();// 创建 MasterSlave数据源DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap,shardingMasterSlaveConfig.getMasterSlaveRule(), newHashMap);log.info("masterSlaveDataSource config complete");return dataSource;}}

