1. 对pom相关文件进行引入
<!-- ShardingJDBC核心包-->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>4.0.0-RC1</version>
</dependency>
<!--ShardingJDBC与Spring的整合 -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>4.0.0-RC1</version>
</dependency>
2.在applicationContext.xml文件进行分库分表的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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://shardingsphere.apache.org/schema/shardingsphere/sharding
http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd">
<!--总结:
sharding:sharding-rule定义分表规则:
data-source-names="ds0,ds1" 说明有几个数据源
sharding:table-rule 节点定义数据存储规则
logic-table=“t_order” 代表逻辑表名
actual-data-nodes=“ds$->{0..1}.t_order_->{0..1}”
说明数据库分布在ds0,ds1两个数据源,物理表存在t_order_1,t_order_0
database-strategy-ref="databaseStrategy"说明 order表分库策略
基于order.user_id值对2取余保存到ds0或ds1的数据库中
table-strategy-ref="orderTableStrategy"
基于order.order_id对2取余决定存储在对应的数据库的t_order_0或者t_order_1表中
实例
insert into t_order(order_id,user_id,status) values(?,?.'N')
order_id user_id
1 2 ->ds0.order_1
2 2 ->ds0.order_0
3 1 ->ds1.order_1
4 1 ->ds1.order_0
-->
<!--配置连接数据库的数据源 -->
<bean id="ds0" class="com.zaxxer.hikari.HikariDataSource">
<!--配置连接数据库的驱动 -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<!--配置连接哪一个数据库-->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3307/mall_0?useSSL=false"/>
<!--配置用户名信息 -->
<property name="username" value="root"/>
<!--配置密码信息-->
<property name="password" value="root"/>
</bean>
<bean id="ds1" class="com.zaxxer.hikari.HikariDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mall_1?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--
基于那列进行分表策略
sharding-column:数据库基于那一列进行分库处理
algorithm-expression:对user_id进行取余 假如 user_id%2=0 存入到ds0数据库中
-->
<sharding:inline-strategy id="databaseStrategy" sharding-column="user_id"
algorithm-expression="ds$->{user_id%2}"/>
<!--
设置对应的分表策略
-->
<sharding:inline-strategy id="orderTableStrategy" sharding-column="order_id"
algorithm-expression="t_order_$->{order_id%2}"/>
<!--配置分片数据源-->
<sharding:data-source id="shardingDataSource">
<!--定义分片规则 data-source-names:上面所规定的数据源信息 -->
<sharding:sharding-rule data-source-names="ds0,ds1">
<!--定义分表规则 -->
<sharding:table-rules>
<!--
logic-tables指定分表中的表前缀
actual-data-nodes:ds$->{0..1}.t_order$->{0..1} 表示有两个数据源ds0,ds1 每个数据库中对应有两张表 t_order_0 和t_order_1
database-strategy-ref:定义分库分表的规则,那些数据存在第一个数据库,那些数据存到哪一张表中
-->
<sharding:table-rule logic-table="t_order"
actual-data-nodes="ds$->{0..1}.t_order_->{0..1}"
database-strategy-ref="databaseStrategy"
table-strategy-ref="orderTableStrategy"
/>
</sharding:table-rules>
</sharding:sharding-rule>
</sharding:data-source>
</beans>