Mixed Rules

Configuration Item Explanation

  1. /* Data source configuration */
  2. HikariDataSource writeDataSource0 = new HikariDataSource();
  3. writeDataSource0.setDriverClassName("com.mysql.jdbc.Driver");
  4. writeDataSource0.setJdbcUrl("jdbc:mysql://localhost:3306/db0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8");
  5. writeDataSource0.setUsername("root");
  6. writeDataSource0.setPassword("");
  7. HikariDataSource writeDataSource1 = new HikariDataSource();
  8. // ...Omit specific configuration.
  9. HikariDataSource read0OfwriteDataSource0 = new HikariDataSource();
  10. // ...Omit specific configuration.
  11. HikariDataSource read1OfwriteDataSource0 = new HikariDataSource();
  12. // ...Omit specific configuration.
  13. HikariDataSource read0OfwriteDataSource1 = new HikariDataSource();
  14. // ...Omit specific configuration.
  15. HikariDataSource read1OfwriteDataSource1 = new HikariDataSource();
  16. // ...Omit specific configuration.
  17. Map<String, DataSource> datasourceMaps = new HashMap<>(6);
  18. datasourceMaps.put("write_ds0", writeDataSource0);
  19. datasourceMaps.put("write_ds0_read0", read0OfwriteDataSource0);
  20. datasourceMaps.put("write_ds0_read1", read1OfwriteDataSource0);
  21. datasourceMaps.put("write_ds1", writeDataSource1);
  22. datasourceMaps.put("write_ds1_read0", read0OfwriteDataSource1);
  23. datasourceMaps.put("write_ds1_read1", read1OfwriteDataSource1);
  24. /* Sharding rule configuration */
  25. // The enumeration value of `ds_$->{0..1}` is the name of the logical data source configured with read-query
  26. ShardingTableRuleConfiguration tOrderRuleConfiguration = new ShardingTableRuleConfiguration("t_order", "ds_${0..1}.t_order_${[0, 1]}");
  27. tOrderRuleConfiguration.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_id", "snowflake"));
  28. tOrderRuleConfiguration.setTableShardingStrategy(new StandardShardingStrategyConfiguration("order_id", "tOrderInlineShardingAlgorithm"));
  29. Properties tOrderShardingInlineProps = new Properties();
  30. tOrderShardingInlineProps.setProperty("algorithm-expression", "t_order_${order_id % 2}");
  31. tOrderRuleConfiguration.getShardingAlgorithms().putIfAbsent("tOrderInlineShardingAlgorithm", new ShardingSphereAlgorithmConfiguration("INLINE",tOrderShardingInlineProps));
  32. ShardingTableRuleConfiguration tOrderItemRuleConfiguration = new ShardingTableRuleConfiguration("t_order_item", "ds_${0..1}.t_order_item_${[0, 1]}");
  33. tOrderItemRuleConfiguration.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_item_id", "snowflake"));
  34. tOrderRuleConfiguration.setTableShardingStrategy(new StandardShardingStrategyConfiguration("order_item_id", "tOrderItemInlineShardingAlgorithm"));
  35. Properties tOrderItemShardingInlineProps = new Properties();
  36. tOrderItemShardingInlineProps.setProperty("algorithm-expression", "t_order_item_${order_item_id % 2}");
  37. tOrderRuleConfiguration.getShardingAlgorithms().putIfAbsent("tOrderItemInlineShardingAlgorithm", new ShardingSphereAlgorithmConfiguration("INLINE",tOrderItemShardingInlineProps));
  38. ShardingRuleConfiguration shardingRuleConfiguration = new ShardingRuleConfiguration();
  39. shardingRuleConfiguration.getTables().add(tOrderRuleConfiguration);
  40. shardingRuleConfiguration.getTables().add(tOrderItemRuleConfiguration);
  41. shardingRuleConfiguration.getBindingTableGroups().add("t_order, t_order_item");
  42. shardingRuleConfiguration.getBroadcastTables().add("t_bank");
  43. // Default database strategy configuration
  44. shardingRuleConfiguration.setDefaultDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("user_id", "default_db_strategy_inline"));
  45. Properties defaultDatabaseStrategyInlineProps = new Properties();
  46. defaultDatabaseStrategyInlineProps.setProperty("algorithm-expression", "ds_${user_id % 2}");
  47. shardingRuleConfiguration.getShardingAlgorithms().put("default_db_strategy_inline", new ShardingSphereAlgorithmConfiguration("INLINE", defaultDatabaseStrategyInlineProps));
  48. // Key generate algorithm configuration
  49. Properties snowflakeProperties = new Properties();
  50. snowflakeProperties.setProperty("worker-id", "123");
  51. shardingRuleConfiguration.getKeyGenerators().put("snowflake", new ShardingSphereAlgorithmConfiguration("SNOWFLAKE", snowflakeProperties));
  52. /* Data encrypt rule configuration */
  53. Properties encryptProperties = new Properties();
  54. encryptProperties.setProperty("aes-key-value", "123456");
  55. EncryptColumnRuleConfiguration columnConfigAes = new EncryptColumnRuleConfiguration("user_name", "user_name", "", "user_name_plain", "name_encryptor");
  56. EncryptColumnRuleConfiguration columnConfigTest = new EncryptColumnRuleConfiguration("pwd", "pwd", "assisted_query_pwd", "", "pwd_encryptor");
  57. EncryptTableRuleConfiguration encryptTableRuleConfig = new EncryptTableRuleConfiguration("t_user", Arrays.asList(columnConfigAes, columnConfigTest));
  58. // Data encrypt algorithm configuration
  59. Map<String, ShardingSphereAlgorithmConfiguration> encryptAlgorithmConfigs = new LinkedHashMap<>(2, 1);
  60. encryptAlgorithmConfigs.put("name_encryptor", new ShardingSphereAlgorithmConfiguration("AES", encryptProperties));
  61. encryptAlgorithmConfigs.put("pwd_encryptor", new ShardingSphereAlgorithmConfiguration("assistedTest", encryptProperties));
  62. EncryptRuleConfiguration encryptRuleConfiguration = new EncryptRuleConfiguration(Collections.singleton(encryptTableRuleConfig), encryptAlgorithmConfigs);
  63. /* Readwrite-splitting rule configuration */
  64. ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration1 = new ReadwriteSplittingDataSourceRuleConfiguration("ds_0", "write_ds0", Arrays.asList("write_ds0_read0", "write_ds0_read1"), "roundRobin");
  65. ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration2 = new ReadwriteSplittingDataSourceRuleConfiguration("ds_1", "write_ds0", Arrays.asList("write_ds1_read0", "write_ds1_read0"), "roundRobin");
  66. // Load balance algorithm configuration
  67. Map<String, ShardingSphereAlgorithmConfiguration> loadBalanceMaps = new HashMap<>(1);
  68. loadBalanceMaps.put("roundRobin", new ShardingSphereAlgorithmConfiguration("ROUND_ROBIN", new Properties()));
  69. ReadwriteSplittingRuleConfiguration readWriteSplittingRuleConfiguration = new ReadwriteSplittingRuleConfiguration(Arrays.asList(dataSourceConfiguration1, dataSourceConfiguration2), loadBalanceMaps);
  70. /* Other Properties configuration */
  71. Properties otherProperties = new Properties();
  72. otherProperties.setProperty("sql-show", "true");
  73. /* The variable `shardingDataSource` is the logic data source referenced by other frameworks(such as ORM, JPA, etc.) */
  74. DataSource shardingDataSource = ShardingSphereDataSourceFactory.createDataSource(datasourceMaps, Arrays.asList(shardingRuleConfiguration, readWriteSplittingRuleConfiguration, encryptRuleConfiguration), otherProperties);