bineea commented on issue #32684:
URL: 
https://github.com/apache/shardingsphere/issues/32684#issuecomment-2309941230

   > What is your configuration?
   
   @Configuration
   public class ShardingConfig {
   
       private static final List<String> geoAndBillingDateShardingTableNames = 
Collections.unmodifiableList(Arrays.asList(
               "biz_sdms_accrual_billing_init",
               "biz_sdms_accrual_billing_init_history",
               "biz_sdms_accrual_billing_result",
               "biz_sdms_accrual_billing_result_detail",
               "biz_sdms_accrual_billing_retrigger_track",
               "biz_sdms_accrual_billing_factor_error",
               "biz_sdms_accrual_billing_pool_error",
               "biz_sdms_accrual_billing_late_detail",
               "biz_sdms_accrual_billing_status"
       ));
   
       @Autowired
       private ShardingProperties shardingProperties;
       @Autowired
       private HikariProperties hikariProperties;
   
       @Bean
       public DataSource shardingDataSource() throws SQLException {
   
           ShardingRuleConfiguration shardingRuleConfig = new 
ShardingRuleConfiguration();
           // date
           Map<String, ShardingSphereAlgorithmConfiguration> shardingAlgorithms 
= shardingRuleConfig.getShardingAlgorithms();
           Properties dateProps = new Properties();
           dateProps.put("strategy", "standard");
           dateProps.put("algorithmClassName", 
DateShardingAlgorithmImpl.class.getName());
           ShardingSphereAlgorithmConfiguration dateAlgorithmConfiguration = 
new ShardingSphereAlgorithmConfiguration("CLASS_BASED", dateProps);
           // geo
           Properties geoProps = new Properties();
           geoProps.put("strategy", "standard");
           geoProps.put("algorithmClassName", 
GeoShardingAlgorithmImpl.class.getName());
           ShardingSphereAlgorithmConfiguration geoAlgorithmConfiguration = new 
ShardingSphereAlgorithmConfiguration("CLASS_BASED", geoProps);
          
           shardingAlgorithms.put("date-algorithm", dateAlgorithmConfiguration);
           shardingAlgorithms.put("geo-code-algorithm", 
geoAlgorithmConfiguration);
   
           Collection<ShardingTableRuleConfiguration> tableRuleConfigs = new 
ArrayList<>();
           
tableRuleConfigs.addAll(getGeoAndBillingDateShardingTableRuleConfig(geoAndBillingDateShardingTableNames));
           shardingRuleConfig.getTables().addAll(tableRuleConfigs);
   
           List<String> bindingTableGroups = new ArrayList<>();
           
bindingTableGroups.add(String.join(String.valueOf(Constants.SEPARATE_COMMA), 
geoAndBillingDateShardingTableNames));
           
shardingRuleConfig.getBindingTableGroups().addAll(bindingTableGroups);
   
           final Properties properties = new Properties();
           //是否打印SQL解析和改写日志
           properties.setProperty("sql-show", Boolean.FALSE.toString());
           //用于SQL执行的工作线程数量,为零则表示无限制
           properties.setProperty("kernel-executor-size", "20");
           //每个物理数据库为每次查询分配的最大连接数量
           properties.setProperty("max-connections-size-per-query", "6");
           
//是否在启动时检查分表元数据一致性(将按照分库分表规则定义的第一张表获取数据库表结构信息,如果第一张表没有创建,启动没有异常,但是sql执行时将产生异常)
           properties.setProperty("check-table-metadata-enabled", "false");
   
           return 
ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), 
Collections.singleton(shardingRuleConfig), properties);
       }
   
       private List<ShardingTableRuleConfiguration> 
getGeoAndBillingDateShardingTableRuleConfig(List<String> tableNameList) {
           List<ShardingTableRuleConfiguration> tableRuleConfigurations = new 
ArrayList<>();
           for (String tableName : tableNameList) {
               ShardingTableRuleConfiguration result = new 
ShardingTableRuleConfiguration(tableName, "DB_${['AP','LA','NA','EMEA']}." + 
tableName + "_${[2024,2025,2026,2027,2028,2029]}_${1..4}");
               result.setDatabaseShardingStrategy(new 
StandardShardingStrategyConfiguration("geo_code", "geo-code-algorithm"));
               result.setTableShardingStrategy(new 
StandardShardingStrategyConfiguration("billing_date", "date-algorithm"));
               tableRuleConfigurations.add(result);
           }
           return tableRuleConfigurations;
       }
   
       private Map<String, DataSource> createDataSourceMap() {
           Map<String, DataSource> result = new HashMap<>(5);
           List<DataSourceConfig> configs = shardingProperties.getConfigs();
           for (DataSourceConfig config : configs) {
               result.put(config.getName(), 
DataSourceUtil.createDataSource(hikariProperties, config.getDriverClassName(), 
config.getJdbcUrl(), config.getUserName(), config.getPassword()));
           }
           return result;
       }
   }
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to