Use Spring Namespace

Import Maven Dependency

  1. <dependency>
  2. <groupId>org.apache.shardingsphere</groupId>
  3. <artifactId>shardingsphere-jdbc-core-spring-namespace</artifactId>
  4. <version>${shardingsphere.version}</version>
  5. </dependency>

Configure Rule

Note: The example database connection pool is HikariCP, which can be replaced with other mainstream database connection pools according to business scenarios.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:sharding="http://shardingsphere.apache.org/schema/shardingsphere/sharding"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://shardingsphere.apache.org/schema/shardingsphere/sharding
  8. http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd
  9. ">
  10. <!-- Configure actual data sources -->
  11. <!-- Configure the first data source -->
  12. <bean id="ds0" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
  13. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  14. <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ds0" />
  15. <property name="username" value="root" />
  16. <property name="password" value="" />
  17. </bean>
  18. <!-- Configure the second data source -->
  19. <bean id="ds1" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
  20. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  21. <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ds1" />
  22. <property name="username" value="root" />
  23. <property name="password" value="" />
  24. </bean>
  25. <!-- Configure database sharding strategy -->
  26. <sharding:sharding-algorithm id="dbShardingAlgorithm" type="INLINE">
  27. <props>
  28. <prop key="algorithm-expression">ds$->{user_id % 2}</prop>
  29. </props>
  30. </sharding:sharding-algorithm>
  31. <sharding:standard-strategy id="dbStrategy" sharding-column="user_id" algorithm-ref="dbShardingAlgorithm" />
  32. <!-- Configure table sharding strategy -->
  33. <sharding:sharding-algorithm id="tableShardingAlgorithm" type="INLINE">
  34. <props>
  35. <prop key="algorithm-expression">t_order$->{order_id % 2}</prop>
  36. </props>
  37. </sharding:sharding-algorithm>
  38. <sharding:standard-strategy id="tableStrategy" sharding-column="user_id" algorithm-ref="tableShardingAlgorithm" />
  39. <!-- Configure distributed key-generate strategy -->
  40. <sharding:key-generate-algorithm id="snowflakeAlgorithm" type="SNOWFLAKE">
  41. <props>
  42. <prop key="worker-id">123</prop>
  43. </props>
  44. </sharding:key-generate-algorithm>
  45. <sharding:key-generate-strategy id="orderKeyGenerator" column="order_id" algorithm-ref="snowflakeAlgorithm" />
  46. <!-- Configure sharding rule -->
  47. <sharding:rule id="shardingRule">
  48. <sharding:table-rules>
  49. <sharding:table-rule logic-table="t_order" actual-data-nodes="ds${0..1}.t_order_${0..1}" database-strategy-ref="dbStrategy" table-strategy-ref="tableStrategy" key-generate-strategy-ref="orderKeyGenerator" />
  50. </sharding:table-rules>
  51. <sharding:binding-table-rules>
  52. <sharding:binding-table-rule logic-tables="t_order,t_order_item"/>
  53. </sharding:binding-table-rules>
  54. <sharding:broadcast-table-rules>
  55. <sharding:broadcast-table-rule table="t_address"/>
  56. </sharding:broadcast-table-rules>
  57. </sharding:rule>
  58. <!-- Configure ShardingSphereDataSource -->
  59. <shardingsphere:data-source id="shardingDataSource" data-source-names="ds0,ds1" rule-refs="shardingRule">
  60. <props>
  61. <prop key="sql-show">false</prop>
  62. </props>
  63. </shardingsphere:data-source>
  64. </beans>

Use ShardingSphereDataSource in Spring

ShardingSphereDataSource can be used directly by injection; or configure ShardingSphereDataSource in ORM frameworks such as JPA or MyBatis.

  1. @Resource
  2. private DataSource dataSource;