首先是 maven 依赖
<!-- 引入 sharding -->
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>2.0.3</version>
</dependency>
<!-- 引入 sharding 需要引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
其次是java 配置文件类 定义两个第一个是:ShardingDataSourceConfig 第二个是:ShardingMasterSlaveConfig
import com.google.common.collect.Maps;
import io.shardingjdbc.core.api.MasterSlaveDataSourceFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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
@Slf4j
@EnableConfigurationProperties(ShardingMasterSlaveConfig.class)
public class ShardingDataSourceConfig {
@Autowired
private ShardingMasterSlaveConfig shardingMasterSlaveConfig;
@Bean
public 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;
}
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<String, HikariDataSource> dataSources =new HashMap<>();
private MasterSlaveRuleConfiguration masterSlaveRule;
}
最后是yel 配置文件
sharding:
jdbc:
data-sources:
###配置第一个从数据库
ds_slave_0:
password: 12345678
jdbc-url: jdbc:mysql://数据库ip地址:端口号/wt-admin?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
driver-class-name: com.mysql.jdbc.Driver
username: wt
###配置主数据库
ds_master:
password: 123456
jdbc-url: jdbc:mysql://数据库ip地址:端口号/wt-dev?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
driver-class-name: com.mysql.jdbc.Driver
username: wt
###配置读写分离
master-slave-rule:
###配置从库选择策略,提供轮询与随机,这里选择轮询
load-balance-algorithm-type: round_robin
###制定从数据库
slave-data-source-names: ds_slave_0
###我们起一个读写分离的名字叫 ds_ms 随便起的
name: ds_ms
### 指定主数据库
master-data-source-name: ds_master