Spring命名空间配置

    详细example: shardingsphere-example

    读写分离

    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:context="http://www.springframework.org/schema/context"
    5. xmlns:p="http://www.springframework.org/schema/p"
    6. xmlns:tx="http://www.springframework.org/schema/tx"
    7. xmlns:master-slave="http://shardingsphere.apache.org/schema/shardingsphere/masterslave"
    8. xsi:schemaLocation="http://www.springframework.org/schema/beans
    9. http://www.springframework.org/schema/beans/spring-beans.xsd
    10. http://www.springframework.org/schema/context
    11. http://www.springframework.org/schema/context/spring-context.xsd
    12. http://www.springframework.org/schema/tx
    13. http://www.springframework.org/schema/tx/spring-tx.xsd
    14. http://shardingsphere.apache.org/schema/shardingsphere/masterslave
    15. http://shardingsphere.apache.org/schema/shardingsphere/masterslave/master-slave.xsd">
    16. <context:annotation-config />
    17. <context:component-scan base-package="org.apache.shardingsphere.example.core.jpa" />
    18. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    19. <property name="dataSource" ref="masterSlaveDataSource" />
    20. <property name="jpaVendorAdapter">
    21. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="MYSQL" />
    22. </property>
    23. <property name="packagesToScan" value="org.apache.shardingsphere.example.core.jpa.entity" />
    24. <property name="jpaProperties">
    25. <props>
    26. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    27. <prop key="hibernate.hbm2ddl.auto">create</prop>
    28. <prop key="hibernate.show_sql">true</prop>
    29. </props>
    30. </property>
    31. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="entityManagerFactory" />
    32. <tx:annotation-driven />
    33. <bean id="ds_master" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    34. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    35. <property name="url" value="jdbc:mysql://localhost:3306/ds_master" />
    36. <property name="username" value="root" />
    37. <property name="password" value="" />
    38. </bean>
    39. <bean id="ds_slave0" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    40. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    41. <property name="url" value="jdbc:mysql://localhost:3306/ds_slave0" />
    42. <property name="username" value="root" />
    43. <property name="password" value="" />
    44. </bean>
    45. <bean id="ds_slave1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    46. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    47. <property name="url" value="jdbc:mysql://localhost:3306/ds_slave1" />
    48. <property name="username" value="root" />
    49. <property name="password" value="" />
    50. </bean>
    51. <!-- 4.0.0-RC1 版本 负载均衡策略配置方式 -->
    52. <!-- <bean id="randomStrategy" class="org.apache.shardingsphere.example.spring.namespace.algorithm.masterslave.RandomMasterSlaveLoadBalanceAlgorithm" /> -->
    53. <!-- 4.0.0-RC2 之后版本 负载均衡策略配置方式 -->
    54. <master-slave:load-balance-algorithm id="randomStrategy" type="RANDOM" />
    55. <master-slave:data-source id="masterSlaveDataSource" master-data-source-name="ds_master" slave-data-source-names="ds_slave0, ds_slave1" strategy-ref="randomStrategy">
    56. <prop key="sql.show">true</prop>
    57. <prop key="executor.size">10</prop>
    58. <prop key="foo">bar</prop>
    59. </master-slave:props>
    60. </master-slave:data-source>
    61. </beans>

    数据脱敏

    数据分片 + 读写分离

    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:p="http://www.springframework.org/schema/p"
    5. xmlns:context="http://www.springframework.org/schema/context"
    6. xmlns:tx="http://www.springframework.org/schema/tx"
    7. xmlns:sharding="http://shardingsphere.apache.org/schema/shardingsphere/sharding"
    8. xmlns:master-slave="http://shardingsphere.apache.org/schema/shardingsphere/masterslave"
    9. xsi:schemaLocation="http://www.springframework.org/schema/beans
    10. http://www.springframework.org/schema/beans/spring-beans.xsd
    11. http://www.springframework.org/schema/context
    12. http://www.springframework.org/schema/context/spring-context.xsd
    13. http://www.springframework.org/schema/tx
    14. http://www.springframework.org/schema/tx/spring-tx.xsd
    15. http://shardingsphere.apache.org/schema/shardingsphere/sharding
    16. http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd
    17. http://shardingsphere.apache.org/schema/shardingsphere/masterslave
    18. http://shardingsphere.apache.org/schema/shardingsphere/masterslave/master-slave.xsd">
    19. <context:annotation-config />
    20. <context:component-scan base-package="org.apache.shardingsphere.example.core.jpa" />
    21. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    22. <property name="dataSource" ref="shardingDataSource" />
    23. <property name="jpaVendorAdapter">
    24. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="MYSQL" />
    25. </property>
    26. <property name="packagesToScan" value="org.apache.shardingsphere.example.core.jpa.entity" />
    27. <property name="jpaProperties">
    28. <props>
    29. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    30. <prop key="hibernate.hbm2ddl.auto">create</prop>
    31. <prop key="hibernate.show_sql">true</prop>
    32. </props>
    33. </property>
    34. </bean>
    35. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="entityManagerFactory" />
    36. <tx:annotation-driven />
    37. <bean id="ds_master0" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    38. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    39. <property name="url" value="jdbc:mysql://localhost:3306/ds_master0" />
    40. <property name="password" value="" />
    41. </bean>
    42. <bean id="ds_master0_slave0" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    43. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    44. <property name="url" value="jdbc:mysql://localhost:3306/ds_master0_slave0" />
    45. <property name="username" value="root" />
    46. <property name="password" value="" />
    47. </bean>
    48. <bean id="ds_master0_slave1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    49. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    50. <property name="url" value="jdbc:mysql://localhost:3306/ds_master0_slave1" />
    51. <property name="username" value="root" />
    52. <property name="password" value="" />
    53. </bean>
    54. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    55. <property name="url" value="jdbc:mysql://localhost:3306/ds_master1" />
    56. <property name="username" value="root" />
    57. <property name="password" value="" />
    58. </bean>
    59. <bean id="ds_master1_slave0" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    60. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    61. <property name="url" value="jdbc:mysql://localhost:3306/ds_master1_slave0" />
    62. <property name="username" value="root" />
    63. <property name="password" value="" />
    64. </bean>
    65. <bean id="ds_master1_slave1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    66. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    67. <property name="url" value="jdbc:mysql://localhost:3306/ds_master1_slave1" />
    68. <property name="username" value="root" />
    69. <property name="password" value="" />
    70. </bean>
    71. <!-- 4.0.0-RC1 版本 负载均衡策略配置方式 -->
    72. <!-- <bean id="randomStrategy" class="org.apache.shardingsphere.example.spring.namespace.algorithm.masterslave.RandomMasterSlaveLoadBalanceAlgorithm" /> -->
    73. <!-- 4.0.0-RC2 之后版本 负载均衡策略配置方式 -->
    74. <master-slave:load-balance-algorithm id="randomStrategy" type="RANDOM" />
    75. <sharding:inline-strategy id="databaseStrategy" sharding-column="user_id" algorithm-expression="ds_ms$->{user_id % 2}" />
    76. <sharding:inline-strategy id="orderTableStrategy" sharding-column="order_id" algorithm-expression="t_order$->{order_id % 2}" />
    77. <sharding:inline-strategy id="orderItemTableStrategy" sharding-column="order_id" algorithm-expression="t_order_item$->{order_id % 2}" />
    78. <sharding:key-generator id="orderKeyGenerator" type="SNOWFLAKE" column="order_id" />
    79. <sharding:key-generator id="itemKeyGenerator" type="SNOWFLAKE" column="order_item_id" />
    80. <sharding:data-source id="shardingDataSource">
    81. <sharding:sharding-rule data-source-names="ds_master0,ds_master0_slave0,ds_master0_slave1,ds_master1,ds_master1_slave0,ds_master1_slave1">
    82. <sharding:master-slave-rules>
    83. <sharding:master-slave-rule id="ds_ms0" master-data-source-name="ds_master0" slave-data-source-names="ds_master0_slave0, ds_master0_slave1" strategy-ref="randomStrategy" />
    84. <sharding:master-slave-rule id="ds_ms1" master-data-source-name="ds_master1" slave-data-source-names="ds_master1_slave0, ds_master1_slave1" strategy-ref="randomStrategy" />
    85. </sharding:master-slave-rules>
    86. <sharding:table-rules>
    87. <sharding:table-rule logic-table="t_order" actual-data-nodes="ds_ms$->{0..1}.t_order$->{0..1}" database-strategy-ref="databaseStrategy" table-strategy-ref="orderTableStrategy" key-generator-ref="orderKeyGenerator" />
    88. <sharding:table-rule logic-table="t_order_item" actual-data-nodes="ds_ms$->{0..1}.t_order_item$->{0..1}" database-strategy-ref="databaseStrategy" table-strategy-ref="orderItemTableStrategy" key-generator-ref="itemKeyGenerator" />
    89. </sharding:table-rules>
    90. <sharding:binding-table-rules>
    91. <sharding:binding-table-rule logic-tables="t_order, t_order_item" />
    92. </sharding:binding-table-rules>
    93. <sharding:broadcast-table-rules>
    94. <sharding:broadcast-table-rule table="t_config" />
    95. </sharding:broadcast-table-rules>
    96. </sharding:sharding-rule>
    97. </sharding:data-source>
    98. </beans>

    治理

    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:orchestration="http://shardingsphere.apache.org/schema/shardingsphere/orchestration"
    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/orchestration
    8. http://shardingsphere.apache.org/schema/shardingsphere/orchestration/orchestration.xsd">
    9. <orchestration:registry-center id="regCenter" type="zookeeper" server-lists="localhost:2181" namespace="orchestration-spring-namespace-demo" operation-timeout-milliseconds="1000"
    10. </beans>

    分库分表

    命名空间:http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd

    <sharding:data-source />

    <sharding:sharding-rule />

    名称类型说明
    data-source-names属性数据源Bean列表,多个Bean以逗号分隔
    table-rules标签表分片规则配置对象
    binding-table-rules (?)标签绑定表规则列表
    broadcast-table-rules (?)标签广播表规则列表
    default-data-source-name (?)属性未配置分片规则的表将通过默认数据源定位
    default-database-strategy-ref (?)属性默认数据库分片策略,对应<sharding:xxx-strategy>中的策略Id,缺省表示不分库
    default-table-strategy-ref (?)属性默认表分片策略,对应<sharding:xxx-strategy>中的策略Id,缺省表示不分表
    default-key-generator-ref (?)属性默认自增列值生成器引用,缺省使用org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator
    encrypt-rule (?)标签脱敏规则

    <sharding:table-rules />

    名称类型说明
    table-rule (+)标签表分片规则配置对象

    <sharding:table-rule />

    名称类型说明
    logic-table属性逻辑表名称
    actual-data-nodes (?)属性由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点,用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况
    database-strategy-ref (?)属性数据库分片策略,对应<sharding:xxx-strategy>中的策略Id,缺省表示使用<sharding:sharding-rule />配置的默认数据库分片策略
    table-strategy-ref (?)属性表分片策略,对应<sharding:xxx-strategy>中的策略Id,缺省表示使用<sharding:sharding-rule />配置的默认表分片策略
    key-generator-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属性Spring Bean Id
    sharding-column属性分片列名称
    precise-algorithm-ref属性精确分片算法引用,用于=和IN。该类需实现PreciseShardingAlgorithm接口
    range-algorithm-ref (?)属性范围分片算法引用,用于BETWEEN。该类需实现RangeShardingAlgorithm接口

    <sharding:complex-strategy />

    名称类型说明
    id属性Spring Bean Id
    sharding-columns属性分片列名称,多个列以逗号分隔
    algorithm-ref属性复合分片算法引用。该类需实现ComplexKeysShardingAlgorithm接口

    <sharding:inline-strategy />

    <sharding:hint-database-strategy />

    名称类型说明
    id属性Spring Bean Id
    algorithm-ref属性Hint分片算法。该类需实现HintShardingAlgorithm接口

    <sharding:none-strategy />

    名称类型说明
    id属性Spring Bean Id

    <sharding:key-generator />

    名称类型说明
    column属性自增列名称
    type属性自增列值生成器类型,可自定义或选择内置类型:SNOWFLAKE/UUID
    props-ref属性自增列值生成器的属性配置引用

    Properties

    SNOWFLAKE
    名称数据类型说明
    worker.id (?)long工作机器唯一id,默认为0
    max.tolerate.time.difference.milliseconds (?)long最大容忍时钟回退时间,单位:毫秒。默认为10毫秒
    max.vibration.offset (?)int最大抖动上限值,范围[0, 4096),默认为1。注:若使用此算法生成值作分片值,建议配置此属性。此算法在不同毫秒内所生成的key取模2^n (2^n一般为分库或分表数) 之后结果总为0或1。为防止上述分片问题,建议将此属性值配置为(2^n)-1

    <sharding:encrypt-rule />

    名称类型说明
    encrypt:encrypt-rule(?)标签加解密规则

    <sharding:props />

    名称类型说明
    sql.show (?)属性是否开启SQL显示,默认值: false
    executor.size (?)属性工作线程数量,默认值: CPU核数
    max.connections.size.per.query (?)属性每个物理数据库为每次查询分配的最大连接数量。默认值: 1
    check.table.metadata.enabled (?)属性是否在启动时检查分表元数据一致性,默认值: false
    query.with.cipher.column (?)属性当存在明文列时,是否使用密文列查询,默认值: true

    读写分离

    命名空间:http://shardingsphere.apache.org/schema/shardingsphere/masterslave/master-slave.xsd

    <master-slave:data-source />

    名称类型说明
    id属性Spring Bean Id
    master-data-source-name属性主库数据源Bean Id
    slave-data-source-names属性从库数据源Bean Id列表,多个Bean以逗号分隔
    strategy-ref (?)属性从库负载均衡算法引用。该类需实现MasterSlaveLoadBalanceAlgorithm接口
    strategy-type (?)属性从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若strategy-ref存在则忽略该配置
    props (?)标签属性配置

    <master-slave:props />

    名称类型说明
    sql.show (?)属性是否开启SQL显示,默认值: false
    executor.size (?)属性工作线程数量,默认值: CPU核数
    max.connections.size.per.query (?)属性每个物理数据库为每次查询分配的最大连接数量。默认值: 1
    check.table.metadata.enabled (?)属性是否在启动时检查分表元数据一致性,默认值: false

    <master-slave:load-balance-algorithm />

    4.0.0-RC2 版本 添加

    名称类型说明
    id属性Spring Bean Id
    type属性负载均衡算法类型,‘RANDOM’或’ROUND_ROBIN’,支持自定义拓展
    props-ref (?)属性负载均衡算法配置参数

    <encrypt:data-source />

    <encrypt:encryptors />

    名称类型说明
    encryptor(+)标签加密器配置

    <encrypt:encryptor />

    名称类型说明
    id属性加密器的名称
    type属性加解密器类型,可自定义或选择内置类型:MD5/AES
    props-ref属性属性配置, 注意:使用AES加密器,需要配置AES加密器的KEY属性:aes.key.value

    <encrypt:tables />

    名称类型说明
    table(+)标签加密表配置

    <encrypt:table />

    名称类型说明
    column(+)标签加密列配置

    <encrypt:column />

    名称类型说明
    logic-column属性逻辑列名
    plain-column属性存储明文的字段
    cipher-column属性存储密文的字段
    assisted-query-columns属性辅助查询字段,针对ShardingQueryAssistedEncryptor类型的加解密器进行辅助查询

    <encrypt:props />

    名称类型说明
    sql.show (?)属性是否开启SQL显示,默认值: false
    query.with.cipher.column (?)属性当存在明文列时,是否使用密文列查询,默认值: true

    数据分片 + 治理

    命名空间:http://shardingsphere.apache.org/schema/shardingsphere/orchestration/orchestration.xsd

    <orchestration:sharding-data-source />

    名称类型说明
    id属性ID
    data-source-ref (?)属性被治理的数据库id
    registry-center-ref属性注册中心id
    overwrite属性本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准。缺省为不覆盖

    读写分离 + 治理

    命名空间:

    <orchestration:master-slave-data-source />

    名称类型说明
    id属性ID
    data-source-ref (?)属性被治理的数据库id
    registry-center-ref属性注册中心id
    overwrite属性本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准。缺省为不覆盖

    数据脱敏 + 治理

    <orchestration:encrypt-data-source />

    名称类型说明
    id属性ID
    data-source-ref (?)属性被治理的数据库id
    registry-center-ref属性注册中心id
    overwrite属性本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准。缺省为不覆盖

    命名空间:

    <orchestration:registry-center />