数据分片 Spring 命名空间的配置方式,适用于传统的 Spring 项目,通过命名空间 xml 配置文件的方式配置分片规则和属性,由 Spring 完成 ShardingSphereDataSource 对象的创建和管理,避免额外的编码工作。
命名空间:http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding-5.2.0.xsd
<sharding:rule />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | Spring Bean Id |
table-rules (?) | 标签 | 分片表规则配置 |
auto-table-rules (?) | 标签 | 自动分片表规则配置 |
binding-table-rules (?) | 标签 | 绑定表规则配置 |
broadcast-table-rules (?) | 标签 | 广播表规则配置 |
default-database-strategy-ref (?) | 属性 | 默认分库策略名称 |
default-table-strategy-ref (?) | 属性 | 默认分表策略名称 |
default-key-generate-strategy-ref (?) | 属性 | 默认分布式序列策略名称 |
default-sharding-column (?) | 属性 | 默认分片列名称 |
<sharding:table-rule />
名称 | 类型 | 说明 |
---|---|---|
logic-table | 属性 | 逻辑表名称 |
actual-data-nodes | 属性 | 由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持 inline 表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点,用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况 |
actual-data-sources | 属性 | 自动分片表数据源名 |
database-strategy-ref | 属性 | 标准分片表分库策略名称 |
table-strategy-ref | 属性 | 标准分片表分表策略名称 |
sharding-strategy-ref | 属性 | 自动分片表策略名称 |
key-generate-strategy-ref | 属性 | 分布式序列策略名称 |
<sharding:binding-table-rules />
名称 | 类型 | 说明 |
---|---|---|
binding-table-rule (+) | 标签 | 绑定表规则配置 |
<sharding:binding-table-rule />
名称 | 类型 | 说明 |
---|---|---|
logic-tables | 属性 | 绑定表名称,多个表以逗号分隔 |
<sharding:broadcast-table-rules />
名称 | 类型 | 说明 |
---|---|---|
broadcast-table-rule (+) | 标签 | 广播表规则配置 |
<sharding:broadcast-table-rule />
名称 | 类型 | 说明 |
---|---|---|
table | 属性 | 广播表名称 |
<sharding:standard-strategy />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | 标准分片策略名称 |
sharding-column | 属性 | 分片列名称 |
algorithm-ref | 属性 | 分片算法名称 |
<sharding:complex-strategy />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | 复合分片策略名称 |
sharding-columns | 属性 | 分片列名称,多个列以逗号分隔 |
algorithm-ref | 属性 | 分片算法名称 |
<sharding:hint-strategy />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | Hint 分片策略名称 |
algorithm-ref | 属性 | 分片算法名称 |
<sharding:none-strategy />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | 分片策略名称 |
<sharding:key-generate-strategy />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | 分布式序列策略名称 |
column | 属性 | 分布式序列列名称 |
algorithm-ref | 属性 | 分布式序列算法名称 |
<sharding:sharding-algorithm />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | 分片算法名称 |
type | 属性 | 分片算法类型 |
props (?) | 标签 | 分片算法属性配置 |
<sharding:key-generate-algorithm />
名称 | 类型 | 说明 |
---|---|---|
id | 属性 | 分布式序列算法名称 |
type | 属性 | 分布式序列算法类型 |
props (?) | 标签 | 分布式序列算法属性配置 |
算法类型的详情,请参见内置分片算法列表和内置分布式序列算法列表。
注意事项:行表达式标识符可以使用
${...}
或$->{...}
,但前者与 Spring 本身的属性文件占位符冲突,因此在 Spring 环境中使用行表达式标识符建议使用$->{...}
。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:shardingsphere="http://shardingsphere.apache.org/schema/shardingsphere/datasource"
xmlns:sharding="http://shardingsphere.apache.org/schema/shardingsphere/sharding"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://shardingsphere.apache.org/schema/shardingsphere/datasource
http://shardingsphere.apache.org/schema/shardingsphere/datasource/datasource.xsd
http://shardingsphere.apache.org/schema/shardingsphere/sharding
http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd
">
<context:component-scan base-package="org.apache.shardingsphere.example.core.mybatis" />
<bean id="demo_ds_0" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo_ds_0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<bean id="demo_ds_1" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo_ds_1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<sharding:standard-strategy id="databaseStrategy" sharding-column="user_id" algorithm-ref="inlineStrategyShardingAlgorithm" />
<sharding:sharding-algorithm id="inlineStrategyShardingAlgorithm" type="INLINE">
<props>
<prop key="algorithm-expression">demo_ds_${user_id % 2}</prop>
</props>
</sharding:sharding-algorithm>
<sharding:key-generate-algorithm id="snowflakeAlgorithm" type="SNOWFLAKE">
</sharding:key-generate-algorithm>
<sharding:key-generate-strategy id="orderKeyGenerator" column="order_id" algorithm-ref="snowflakeAlgorithm" />
<sharding:key-generate-strategy id="itemKeyGenerator" column="order_item_id" algorithm-ref="snowflakeAlgorithm" />
<sharding:rule id="shardingRule">
<sharding:table-rules>
<sharding:table-rule logic-table="t_order" database-strategy-ref="databaseStrategy" key-generate-strategy-ref="orderKeyGenerator" />
<sharding:table-rule logic-table="t_order_item" database-strategy-ref="databaseStrategy" key-generate-strategy-ref="itemKeyGenerator" />
</sharding:table-rules>
<sharding:binding-table-rules>
<sharding:binding-table-rule logic-tables="t_order,t_order_item"/>
</sharding:binding-table-rules>
<sharding:broadcast-table-rules>
<sharding:broadcast-table-rule table="t_address"/>
</sharding:broadcast-table-rules>
</sharding:rule>
<shardingsphere:data-source id="shardingDataSource" database-name="sharding-databases" data-source-names="demo_ds_0, demo_ds_1" rule-refs="shardingRule" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="shardingDataSource" />
</bean>
<tx:annotation-driven />
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="shardingDataSource"/>
<property name="mapperLocations" value="classpath*:META-INF/mappers/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.apache.shardingsphere.example.core.mybatis.repository"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>