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]