参考:这是shard-jdbc2.x的 官网:https://shardingsphere.apache.org/document/current/cn/overview/
环境
框架版本
shard-jdbc4.0.0-RC2spring boot2.1.7mybatis-plus3.2.0druid1.1.18mysql8.x
shard-jdbc依赖
当当网开源的组件,现在收录到apache 官网提供多种部署方式,这里我是用spring boot风格的依赖
<!-- sharding-jdbc驱动 --
>
<dependency
>
<groupId
>org.apache.shardingsphere
</groupId
>
<artifactId
>sharding-jdbc-spring-boot-starter
</artifactId
>
<version
>${sharding-sphere.version}</version
>
</dependency
>
<!-- sharding-jdbc驱动 --
>
<dependency
>
<groupId
>org.apache.shardingsphere
</groupId
>
<artifactId
>sharding-jdbc-spring-namespace
</artifactId
>
<version
>${sharding-sphere.version}</version
>
</dependency
>
druid依赖
druid依赖不要使用spring boot starter自动配置的依赖,因为shard-jdbc的配置不需要配spring.datasource,而使用druid-spring-boot-starter,由于auto configuration一直读不到spring.datasource,导致启动一直报错。查了很久才发现是使用这个依赖导致
不要用这种spring boot风格依赖
<dependency
>
<groupId
>com.alibaba
</groupId
>
<artifactId
>druid-spring-boot-starter
</artifactId
>
<version
>1.1.20
</version
>
</dependency
>
用这种maven风格的依赖
<dependency
>
<groupId
>com
.alibaba
</groupId
>
<artifactId
>druid
</artifactId
>
<version
>$
{druid
.version
}</version
>
</dependency
>
配置如下
spring:
shardingsphere:
masterslave:
name: ms
load-balance-algorithm-type: round_robin
master-data-source-name: master
slave-data-source-names: slave0
,slave1
props:
check:
table:
metadata:
enabled: false
sql:
show: true
datasource:
names: master
,slave0
,slave1
master:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc
:mysql
://ip1
:3306/iif_user
?useUnicode=true
&useSSL=false
&characterEncoding=utf8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
platform: mysql
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat
,wall
,slf4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
web-stat-filter:
enabled: false
url-pattern: /*
exclusions: '*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/*'
stat-view-servlet:
enabled: false
url-pattern: /druid/*
reset-enable: true
login-username: admin
login-password: admin
filter:
slf4j:
enabled: false
statement-create-after-log-enabled: false
statement-close-after-log-enabled: false
result-set-open-after-log-enabled: false
result-set-close-after-log-enabled: false
slave0:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc
:mysql
://ip2
:3307/iif_user
?useUnicode=true
&useSSL=false
&characterEncoding=utf8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
platform: mysql
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat
,wall
,slf4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
web-stat-filter:
enabled: false
url-pattern: /*
exclusions: '*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/*'
stat-view-servlet:
enabled: false
url-pattern: /druid/*
reset-enable: true
login-username: admin
login-password: admin
filter:
slf4j:
enabled: false
statement-create-after-log-enabled: false
statement-close-after-log-enabled: false
result-set-open-after-log-enabled: false
result-set-close-after-log-enabled: false
slave1:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc
:mysql
://ip3
:3308/iif_user
?useUnicode=true
&useSSL=false
&characterEncoding=utf8
username: root
password: mysql@dongri
driver-class-name: com.mysql.cj.jdbc.Driver
platform: mysql
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat
,wall
,slf4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
web-stat-filter:
enabled: false
url-pattern: /*
exclusions: '*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/*'
stat-view-servlet:
enabled: false
url-pattern: /druid/*
reset-enable: true
login-username: admin
login-password: admin
filter:
slf4j:
enabled: false
statement-create-after-log-enabled: false
statement-close-after-log-enabled: false
result-set-open-after-log-enabled: false
result-set-close-after-log-enabled: false
sharding:
master-slave-rules:
ms:
master-data-source-name: master
slave
-data
-source
-names
[0]: slave0
slave
-data
-source
-names
[1]: slave1
load-balance-algorithm-type: round_robin
测试效果如下
因为在配置项设置打印sql 可以看到写操作都在主库:master 读操作在从库(指定轮询策略):slave0,slave1
目前看到功能是正常的,后续使用过程中,再发现下是否稳定?是否有坑?