shardingsphere-jdbc 整合springboot
时间: 2025-08-20 16:56:51 AIGC 浏览: 18
在 Spring Boot 项目中整合 ShardingSphere-JDBC,可以实现数据的透明分片、读写分离、数据加密等功能,而无需对业务代码进行大规模修改。以下是详细的整合步骤和核心配置方法。
### 1. 添加 Maven 依赖
首先,在 `pom.xml` 文件中添加 ShardingSphere-JDBC 的依赖。以 ShardingSphere-JDBC 5.5.0 版本为例:
```xml
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.5.0</version>
</dependency>
```
该依赖会自动引入 ShardingSphere-JDBC 的核心模块以及与 Spring Boot 集成所需的自动配置支持[^2]。
### 2. 配置数据源
接下来,在 `application.yml` 或 `application.properties` 文件中配置数据源和分片规则。以下是一个基于 YAML 格式的示例配置:
```yaml
spring:
shardingsphere:
datasource:
names: ds0,ds1
ds0:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds0
username: root
password: root
ds1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds1
username: root
password: root
rules:
sharding:
tables:
pay_order:
actual-data-nodes: ds$->{0..1}.pay_order_$->{0..1}
table-strategy:
standard:
sharding-column: order_id
sharding-algorithm-name: order-table-inline
key-generator:
column: order_id
type: SNOWFLAKE
sharding-algorithms:
order-table-inline:
type: INLINE
props:
algorithm-expression: pay_order_$->{order_id % 2}
```
上述配置定义了两个数据源 `ds0` 和 `ds1`,并配置了 `pay_order` 表的分片策略,按 `order_id` 字段进行取模分片,将数据分布到 `pay_order_0` 和 `pay_order_1` 两个子表中。主键 `order_id` 使用 Snowflake 算法生成[^4]。
### 3. 启用 ShardingSphere-JDBC
在 Spring Boot 应用的主类中添加 `@EnableTransactionManagement` 注解以启用事务管理:
```java
@SpringBootApplication
@EnableTransactionManagement
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
ShardingSphere-JDBC 会自动加载配置并创建分片数据源,业务逻辑中可直接使用 `JdbcTemplate` 或 `MyBatis` 进行数据库操作[^3]。
### 4. 自定义配置(可选)
如果需要实现数据加密、自定义主键生成策略等功能,可以在配置中添加相关规则。例如,使用 SM4 算法对 `product_name` 字段进行加解密:
```yaml
spring:
shardingsphere:
rules:
encrypt:
encryptors:
sm4-encryptor:
type: SM4
props:
key: your-16-byte-key
tables:
pay_order:
columns:
product_name:
cipher-column: product_name
encryptor: sm4-encryptor
```
此配置会在插入数据时自动对 `product_name` 字段进行加密,在查询时自动解密,整个过程对应用透明[^2]。
### 5. 使用 MyBatis Plus(可选)
若项目中使用了 MyBatis Plus,需确保其配置与 ShardingSphere-JDBC 兼容。在 `application.yml` 中添加如下配置:
```yaml
mybatis-plus:
configuration:
mapUnderscoreToCamelCase: true
mapper-locations: classpath:mapper/**/*.xml
```
并确保 Mapper 接口和 XML 文件路径正确,ShardingSphere-JDBC 会自动接管 SQL 路由和执行过程。
### 6. 验证整合效果
编写测试类验证数据是否正确分片存储:
```java
@SpringBootTest
public class PayOrderServiceTest {
@Autowired
private PayOrderMapper payOrderMapper;
@Test
void testInsert() {
PayOrder order = new PayOrder();
order.setUserId(1001);
order.setProductName("测试商品");
order.setCount(2);
payOrderMapper.insert(order);
}
@Test
void testSelect() {
List<PayOrder> orders = payOrderMapper.selectList(null);
orders.forEach(System.out::println);
}
}
```
上述测试方法会验证插入和查询操作是否正确地路由到对应的分片节点[^4]。
---
阅读全文
相关推荐


















