1、文档
官方链接:http://shardingjdbc.io/docs_en/02-guide/configuration/
2、依赖
<dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>2.0.3</version> </dependency>
3、配置注入
由于官网的sharding-jdbc-core-spring-boot-starter依赖是基于springboot1.5.+,其中使用了RelaxedPropertyResolver类来解析yml文件,而2.0中移除了该类(2.0中使用Binder类来读取yml文件),所以这里自己读取yml
yml文件映射类:使用DruidDataSource数据源,提供监控
@Data @ConfigurationProperties(prefix = "sharding.jdbc") public class ShardingMastSlaveConfig { private Map<String, DruidDataSource> dataSources = new HashMap<>(); private MasterSlaveRuleConfiguration masterSlaveRule; }
yml文件:
sharding.jdbc: data-sources: # 注意命名格式 ds_master: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true username: root password: root ds_slave_0: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test_slave?useUnicode=true&characterEncoding=utf-8&useSSL=true username: root password: root master-slave-rule: name: ds_ms master-data-source-name: ds_master slave-data-source-names: ds_slave_0 load-balance-algorithm-type: round_robin
注入MasterSlaveDataSource:
@Slf4j @Configuration @EnableConfigurationProperties(ShardingMastSlaveConfig.class) @ConditionalOnProperty({"sharding.jdbc.data-sources.ds_master.url", "sharding.jdbc.master-slave-rule.master-data-source-name"}) public class ShardingDataSourceConfig { @Autowired private ShardingMastSlaveConfig shardingMastSlaveConfig; @Bean("masterSlaveDataSource") public DataSource masterSlaveDataSource() throws SQLException { shardingMastSlaveConfig.getDataSources().forEach((k, v) -> configDataSource(v)); Map<String, DataSource> dataSourceMap = Maps.newHashMap(); dataSourceMap.putAll(shardingMastSlaveConfig.getDataSources()); DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, shardingMastSlaveConfig.getMasterSlaveRule(), Maps.newHashMap()); log.info("masterSlaveDataSource config complete"); return dataSource; } private void configDataSource(DruidDataSource druidDataSource) { druidDataSource.setMaxActive(20); druidDataSource.setInitialSize(1); druidDataSource.setMaxWait(60000); druidDataSource.setMinIdle(1); druidDataSource.setTimeBetweenEvictionRunsMillis(60000); druidDataSource.setMinEvictableIdleTimeMillis(300000); druidDataSource.setValidationQuery("select 'x'"); druidDataSource.setTestWhileIdle(true); druidDataSource.setTestOnBorrow(false); druidDataSource.setTestOnReturn(false); druidDataSource.setPoolPreparedStatements(true); druidDataSource.setMaxOpenPreparedStatements(20); druidDataSource.setUseGlobalDataSourceStat(true); try { druidDataSource.setFilters("stat,wall,slf4j"); } catch (SQLException e) { log.error("druid configuration initialization filter", e); } } }
4、创建数据库
创建两个库test和test_slave,两个库中任意建两个相同的表,测试查询和插入即可。
持久层集成了mybatis-plus查询数据库,其中的分页插件配置需要注意:一定要指定方言DialectType,否则分页查询会只到master中去查询,而正常查询操作应该到slave中查询。
参考:https://gitee.com/hanjunchen/sharding-jdbc-demo.git
mysql主从同步参考:https://blog.csdn.net/vipbupafeng/article/details/80272946