首先配置yml文件
spring:
main:
allow-bean-definition-overriding: true
配置nacos
spring:
shardingsphere:
# 显示shardingsphere执行的sql
props:
sql:
show: true
datasource:
names: ds-0,ds-1
ds-0:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_test_0?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: xxxx
#初始化建立物理链接的个数
initial-size: 5
#最大连接池数量
max-active: 10
#最小连接池数量
min-idle: 5
#filters: 启用内置过滤器(第一个 stat必须,否则监控不到SQL) #配置多个英文逗号分隔(统计,sql注入) stat:Druid内置提供一个StatFilter,用于统计监控信息。
# wall:Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析。Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。
filters: stat,wall
#合并多个DruidDataSource的监控数据
use-global-data-source-stat: false
#配置stat-view-servlet
stat-view-servlet:
#允许开启监控
enabled: true
#监控面板路径
url-pattern: /druid/*
ds-1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_test_1?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: xxxx
#初始化建立物理链接的个数
initial-size: 5
#最大连接池数量
max-active: 10
#最小连接池数量
min-idle: 5
#获取连接时最大等待时间,单位毫秒
max-wait: 60000
#通过connectProperties属性来打开mergeSql功能,慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#filters: #配置多个英文逗号分隔(统计,sql注入)
filters: stat,wall
#合并多个DruidDataSource的监控数据
use-global-data-source-stat: false
#配置stat-view-servlet
stat-view-servlet:
#允许开启监控
enabled: true
#监控面板路径
url-pattern: /druid/*
sharding:
tables:
# 配置分片表 可配置多个表 t_order key-generator:设置密钥生成uuid 生成主键Id SNOWFLAKE:雪花
tb_user:
key-generator:
column: tb_user_id
type: SNOWFLAKE
#指定当前数据节点
actual-data-nodes: ds-$->{0..1}.tb_user_$->{0..1}
### 分库策略
database-strategy:
inline:
#分库分片键
sharding‐column: tb_user_id
#分库分片算法 要么ds-0 要么添加ds-1
algorithm-expression: ds-$->{tb_user_id % 2}
# 分表策略
table-strategy:
inline:
# 分表分片健
sharding‐column: tb_user_id
# 分表算法
algorithm-expression: tb_user_$->{tb_user_id % 2}
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
main:
allow-bean-definition-overriding: true
pom依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>
配置类
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadata;
import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider;
import org.springframework.boot.jdbc.metadata.HikariDataSourcePoolMetadata;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 并且由于 ShardingDataSource 内部是封装了真实数据源的,
* 所以 ShardingDataSource 本身并不需要进行健康检查,遇到 ShardingDataSource 的情况返回 null 即可
*/
@Configuration
public class JpaConfiguration {
/**
* 解决新版Spring中,健康健康检查用到 sharding jdbc 时,该组件没有完全实现MySQL驱动导致的问题.
*/
@Bean
DataSourcePoolMetadataProvider dataSourcePoolMetadataProvider() {
return dataSource -> dataSource instanceof HikariDataSource
// 这里如果所使用的数据源没有对应的 DataSourcePoolMetadata 实现的话也可以全部使用 NotAvailableDataSourcePoolMetadata
? new HikariDataSourcePoolMetadata((HikariDataSource) dataSource)
: new NotAvailableDataSourcePoolMetadata();
}
/**
* 不可用的数据源池元数据.
*/
private static class NotAvailableDataSourcePoolMetadata implements DataSourcePoolMetadata {
@Override
public Float getUsage() {
return null;
}
@Override
public Integer getActive() {
return null;
}
@Override
public Integer getMax() {
return null;
}
@Override
public Integer getMin() {
return null;
}
@Override
public String getValidationQuery() {
// 该字符串是适用于MySQL的简单查询语句,用于检查检查,其他数据库可能需要更换
return "select 1";
}
@Override
public Boolean getDefaultAutoCommit() {
return null;
}
}
}
注意事项(添加id使用的雪花算法,无需添加)
![](https://img-blog.csdnimg.cn/img_convert/1e9fd63bd573b02343272bc4353364a9.png)