个人学习笔记 仅供参考
本示例采用 springboot 2.4.2 + mybatis-plus 3.4.3 + sharding-jdbc 5.0
项目与数据库自行创建,此处只提供主要配置信息
pom
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.0.0</version>
</dependency>
<!--此处不能使用 druid-spring-boot-starter 会与sharding-jdbc冲突-->
<!--java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
1、mybatis-plus 配置
mybatis-plus:
mapper-locations: classpath*:/mapper/*.xml
typeAliasesPackage: com.lc.*.entity
global-config:
db-config:
id-type: AUTO
logic-delete-value: -1
logic-not-delete-value: 0
banner: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
2、sharding-jdbc配置
spring:
shardingsphere:
datasource:
names: write_ds,read_ds_0 # 自定义数据库名称
write_ds:
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/pms?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
driverClassName: com.mysql.cj.jdbc.Driver
time-between-eviction-runs-millis: 300000
validation-query: SELECT 1
max-active: 20
max-wait: 10000
min-idle: 5
initial-size: 5
filters: stat
use-global-data-source-stat: true
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
read_ds_0:
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/pms?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
driverClassName: com.mysql.cj.jdbc.Driver
time-between-eviction-runs-millis: 300000
validation-query: SELECT 1
max-active: 20
max-wait: 10000
min-idle: 5
initial-size: 5
filters: stat
use-global-data-source-stat: true
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
props:
sql-show: true # 开启sql打印 便于观察
# 5.0 版本配置方式
rules:
readwrite-splitting:
load-balancers:
# 负载均衡算法
round-robin:
type: ROUND_ROBIN # 轮询
data-sources:
prds:
# 主库
write-data-source-name: write_ds
# 从库
read-data-source-names: read_ds_0
load-balancer-name: round_robin
相关源码 (对应上面 rules 配置)
public final class YamlReadwriteSplittingRuleSpringBootConfiguration {
private YamlReadwriteSplittingRuleConfiguration readwriteSplitting;
}
public final class YamlReadwriteSplittingRuleConfiguration implements YamlRuleConfiguration {
private Map<String, YamlReadwriteSplittingDataSourceRuleConfiguration> dataSources = new LinkedHashMap<>();
private Map<String, YamlShardingSphereAlgorithmConfiguration> loadBalancers = new LinkedHashMap<>();
...
}
// 读写库配置类
public final class YamlReadwriteSplittingDataSourceRuleConfiguration implements YamlConfiguration {
private String autoAwareDataSourceName;
private String writeDataSourceName;
private List<String> readDataSourceNames = new ArrayList<>();
private String loadBalancerName;
private Properties props = new Properties();
}
// 负载均衡配置类
public final class YamlShardingSphereAlgorithmConfiguration implements YamlConfiguration {
private String type;
private Properties props = new Properties();
}
运行项目,访问接口出现下面信息表示读写分离配置成功