pom-sharding-升级
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.shardingsphere</groupId>
|
<groupId>org.apache.shardingsphere</groupId>
|
||||||
<artifactId>sharding-jdbc-core</artifactId>
|
<artifactId>shardingsphere-jdbc-core</artifactId>
|
||||||
<version>${sharding-jdbc-core.version}</version>
|
<version>${sharding-jdbc-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@@ -1,268 +0,0 @@
|
|||||||
package com.accompany.sharding.config;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.ResourceUtil;
|
|
||||||
import com.accompany.sharding.shardingalgorithm.*;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
|
|
||||||
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
|
||||||
import org.apache.ibatis.plugin.Interceptor;
|
|
||||||
import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
|
|
||||||
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
|
|
||||||
import org.apache.shardingsphere.api.config.sharding.strategy.ShardingStrategyConfiguration;
|
|
||||||
import org.apache.shardingsphere.api.config.sharding.strategy.StandardShardingStrategyConfiguration;
|
|
||||||
import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
|
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.context.annotation.DependsOn;
|
|
||||||
import org.springframework.context.annotation.Primary;
|
|
||||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {这里添加描述}
|
|
||||||
*
|
|
||||||
* @author fangchengyan
|
|
||||||
* @date 2019-08-23 10:08
|
|
||||||
*/
|
|
||||||
@EnableTransactionManagement
|
|
||||||
@Configuration
|
|
||||||
@MapperScan(value = {"com.accompany.sharding.mapper"}, sqlSessionFactoryRef = "shardingSqlSessionFactory")
|
|
||||||
public class ShardingJdbcConfig {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private DataSource dataSource;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private BillRecordShardingAlgorithm billRecordShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private BillRecordRangeShardingAlgorithm billRecordRangeShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private DynamicCommentShardingAlgorithm dynamicCommentShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserInOutRoomRecordShardingAlgorithm userInOutRoomRecordShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserInOutRoomRecordRangeShardingAlgorithm userInOutRoomRecordRangeShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserChatMsgRecordShardingAlgorithm userChatMsgRecordShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserChatMsgRecordRangeShardingAlgorithm userChatMsgRecordRangeShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private FamilyMemberRoomMicRecordShardingAlgorithm familyMemberRoomMicRecordShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private FamilyMemberRoomMicRecordRangeShardingAlgorithm familyMemberRoomMicRecordRangeShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GameGoldLogShardingAlgorithm gameGoldLogShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GameGoldLogRangeShardingAlgorithm gameGoldLogRangeShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private Lucky24RecordShardingAlgorithm lucky24RecordShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private Lucky24RecordRangeShardingAlgorithm lucky24RecordRangeShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GiftSendRecordShardingAlgorithm giftSendRecordShardingAlgorithm;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private GiftSendRecordRangeShardingAlgorithm giftSendRecordRangeShardingAlgorithm;
|
|
||||||
|
|
||||||
@Bean("shardingDataSource")
|
|
||||||
public DataSource shardingDataSource() throws SQLException {
|
|
||||||
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
|
|
||||||
Collection<TableRuleConfiguration> tableRuleConfigs = shardingRuleConfig.getTableRuleConfigs();
|
|
||||||
// 账单按月分表
|
|
||||||
tableRuleConfigs.add(getBillRecordShardingTableRuleConfiguration());
|
|
||||||
// 动态评论按动态id分表
|
|
||||||
tableRuleConfigs.add(getDynamicCommentTableRuleConfiguration());
|
|
||||||
// 进出房间按月分表
|
|
||||||
tableRuleConfigs.add(getUserInOutRoomRecordShardingTableRuleConfiguration());
|
|
||||||
//私聊按月分表
|
|
||||||
tableRuleConfigs.add(getUserChatMsgRecordShardingTableRuleConfiguration());
|
|
||||||
// 家族成员上下麦位记录
|
|
||||||
tableRuleConfigs.add(getFamilyMemberRoomMicRecordShardingTableRuleConfiguration());
|
|
||||||
//游戏日志
|
|
||||||
tableRuleConfigs.add(getGameLogShardingTableRuleConfiguration());
|
|
||||||
//
|
|
||||||
tableRuleConfigs.add(getLucky24RecordShardingTableRuleConfiguration());
|
|
||||||
tableRuleConfigs.add(getGiftSendRecordShardingTableRuleConfiguration());
|
|
||||||
|
|
||||||
//属性配置
|
|
||||||
Properties props = new Properties();
|
|
||||||
//是否打印执行的sql语句
|
|
||||||
props.setProperty("sql.show", "false");
|
|
||||||
Map<String, DataSource> dataSourceMap = new HashMap<>(4);
|
|
||||||
dataSourceMap.put("ds", dataSource);
|
|
||||||
dataSourceMap.put("ds-1", dataSource);
|
|
||||||
return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean("shardingSqlSessionFactory")
|
|
||||||
@DependsOn({"shardingDataSource", "pageInterceptor", "paginationInterceptor"})
|
|
||||||
public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(DataSource shardingDataSource,
|
|
||||||
Interceptor pageInterceptor, PaginationInterceptor paginationInterceptor) throws IOException {
|
|
||||||
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
|
|
||||||
sqlSessionFactoryBean.setDataSource(shardingDataSource);
|
|
||||||
String mapperLocations = "classpath*:/sharding/sqlmappers/*.xml";
|
|
||||||
sqlSessionFactoryBean.setMapperLocations(ResourceUtil.getPathMatchingResource(mapperLocations));
|
|
||||||
sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageInterceptor, paginationInterceptor});
|
|
||||||
return sqlSessionFactoryBean;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean("shardingTransactionManager")
|
|
||||||
@DependsOn({"shardingDataSource"})
|
|
||||||
@Primary
|
|
||||||
public DataSourceTransactionManager transactionManager(@Qualifier("shardingDataSource") DataSource shardingDataSource) {
|
|
||||||
return new DataSourceTransactionManager(shardingDataSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* =====账单表分表策略=====
|
|
||||||
**/
|
|
||||||
private TableRuleConfiguration getBillRecordShardingTableRuleConfiguration() {
|
|
||||||
String logicTable = "bill_record";
|
|
||||||
String actualDataNodes = "ds.bill_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getBillRecordShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getBillRecordShardingStrategy() {
|
|
||||||
String shardingColumn = "create_time";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn,
|
|
||||||
billRecordShardingAlgorithm, billRecordRangeShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* =======动态评论表分表策略===========
|
|
||||||
**/
|
|
||||||
private TableRuleConfiguration getDynamicCommentTableRuleConfiguration() {
|
|
||||||
String logicTable = "community_dynamic_comment";
|
|
||||||
String actualDataNodes = "ds.community_dynamic_comment_${0..9}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getDynamicCommentShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getDynamicCommentShardingStrategy() {
|
|
||||||
String shardingColumn = "dynamic_id";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn, dynamicCommentShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* =====进出房记录表分表策略=====
|
|
||||||
**/
|
|
||||||
private TableRuleConfiguration getUserInOutRoomRecordShardingTableRuleConfiguration() {
|
|
||||||
String logicTable = "user_in_out_room_record";
|
|
||||||
String actualDataNodes = "ds.user_in_out_room_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getUserInOutRoomRecordShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getUserInOutRoomRecordShardingStrategy() {
|
|
||||||
String shardingColumn = "in_time";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn,
|
|
||||||
userInOutRoomRecordShardingAlgorithm, userInOutRoomRecordRangeShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* =====私聊消息表分表策略=====
|
|
||||||
**/
|
|
||||||
private TableRuleConfiguration getUserChatMsgRecordShardingTableRuleConfiguration() {
|
|
||||||
String logicTable = "user_chat_msg_record";
|
|
||||||
String actualDataNodes = "ds.user_chat_msg_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getUserChatMsgRecordShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getUserChatMsgRecordShardingStrategy() {
|
|
||||||
String shardingColumn = "create_time";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn,
|
|
||||||
userChatMsgRecordShardingAlgorithm, userChatMsgRecordRangeShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* =====进出房记录表分表策略=====
|
|
||||||
**/
|
|
||||||
private TableRuleConfiguration getFamilyMemberRoomMicRecordShardingTableRuleConfiguration() {
|
|
||||||
String logicTable = "family_member_room_mic_record";
|
|
||||||
String actualDataNodes = "ds.family_member_room_mic_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getFamilyMemberRoomMicRecordShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getFamilyMemberRoomMicRecordShardingStrategy() {
|
|
||||||
String shardingColumn = "up_time";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn,
|
|
||||||
familyMemberRoomMicRecordShardingAlgorithm, familyMemberRoomMicRecordRangeShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* =====游戏记录=====
|
|
||||||
**/
|
|
||||||
private TableRuleConfiguration getGameLogShardingTableRuleConfiguration() {
|
|
||||||
String logicTable = "game_gold_log";
|
|
||||||
String actualDataNodes = "ds.game_gold_log_${2024..2025}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getGameLogShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getGameLogShardingStrategy() {
|
|
||||||
String shardingColumn = "create_time";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn,
|
|
||||||
gameGoldLogShardingAlgorithm, gameGoldLogRangeShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
private TableRuleConfiguration getLucky24RecordShardingTableRuleConfiguration() {
|
|
||||||
String logicTable = "lucky_24_record";
|
|
||||||
String actualDataNodes = "ds.lucky_24_record_$->{20240914..20241231}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getLucky24RecordShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getLucky24RecordShardingStrategy() {
|
|
||||||
String shardingColumn = "create_time";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn,
|
|
||||||
lucky24RecordShardingAlgorithm, lucky24RecordRangeShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
private TableRuleConfiguration getGiftSendRecordShardingTableRuleConfiguration() {
|
|
||||||
String logicTable = "gift_send_record";
|
|
||||||
String actualDataNodes = "ds.gift_send_record_$->{20240423..20241231}";
|
|
||||||
TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes);
|
|
||||||
result.setTableShardingStrategyConfig(getGiftSendRecordShardingStrategy());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ShardingStrategyConfiguration getGiftSendRecordShardingStrategy() {
|
|
||||||
String shardingColumn = "create_time";
|
|
||||||
return new StandardShardingStrategyConfiguration(shardingColumn,
|
|
||||||
giftSendRecordShardingAlgorithm, giftSendRecordRangeShardingAlgorithm);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -0,0 +1,227 @@
|
|||||||
|
package com.accompany.sharding.config;
|
||||||
|
|
||||||
|
import com.accompany.common.utils.DateTimeUtil;
|
||||||
|
import com.accompany.common.utils.ResourceUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
|
||||||
|
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
||||||
|
import org.apache.ibatis.plugin.Interceptor;
|
||||||
|
import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
|
||||||
|
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
|
||||||
|
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
|
||||||
|
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
|
||||||
|
import org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryConfiguration;
|
||||||
|
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
|
||||||
|
import org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
|
||||||
|
import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
|
||||||
|
import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
|
||||||
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.DependsOn;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {这里添加描述}
|
||||||
|
*
|
||||||
|
* @author fangchengyan
|
||||||
|
* @date 2019-08-23 10:08
|
||||||
|
*/
|
||||||
|
@EnableTransactionManagement
|
||||||
|
@Configuration
|
||||||
|
@MapperScan(value = {"com.accompany.sharding.mapper"}, sqlSessionFactoryRef = "shardingSqlSessionFactory")
|
||||||
|
public class ShardingSphereConfig {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSource dataSource;
|
||||||
|
|
||||||
|
@Bean("shardingDataSource")
|
||||||
|
public DataSource shardingDataSource() throws SQLException {
|
||||||
|
List<RuleConfiguration> ruleConfigs = new ArrayList<>();
|
||||||
|
ruleConfigs.add(getRuleConfig());
|
||||||
|
|
||||||
|
Map<String, DataSource> dataSourceMap = new HashMap<>(4);
|
||||||
|
dataSourceMap.put("ds", dataSource);
|
||||||
|
|
||||||
|
ModeConfiguration modeConfig = new ModeConfiguration("Standalone", new StandalonePersistRepositoryConfiguration("JDBC", new Properties()));
|
||||||
|
//是否打印执行的sql语句
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("sql-show", "false");
|
||||||
|
|
||||||
|
return ShardingSphereDataSourceFactory.createDataSource(modeConfig, dataSourceMap, ruleConfigs, properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("shardingSqlSessionFactory")
|
||||||
|
@DependsOn({"shardingDataSource", "pageInterceptor", "paginationInterceptor"})
|
||||||
|
public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(DataSource shardingDataSource,
|
||||||
|
Interceptor pageInterceptor, PaginationInterceptor paginationInterceptor) throws IOException {
|
||||||
|
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
|
||||||
|
sqlSessionFactoryBean.setDataSource(shardingDataSource);
|
||||||
|
String mapperLocations = "classpath*:/sharding/sqlmappers/*.xml";
|
||||||
|
sqlSessionFactoryBean.setMapperLocations(ResourceUtil.getPathMatchingResource(mapperLocations));
|
||||||
|
sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageInterceptor, paginationInterceptor});
|
||||||
|
return sqlSessionFactoryBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("shardingTransactionManager")
|
||||||
|
@DependsOn({"shardingDataSource"})
|
||||||
|
@Primary
|
||||||
|
public DataSourceTransactionManager transactionManager(@Qualifier("shardingDataSource") DataSource shardingDataSource) {
|
||||||
|
return new DataSourceTransactionManager(shardingDataSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ShardingRuleConfiguration getRuleConfig() {
|
||||||
|
//table和分表策略分开
|
||||||
|
Collection<ShardingAutoTableRuleConfiguration> autoTableConfigs = new ArrayList<>();
|
||||||
|
// 动态评论按动态id分表 .community_dynamic_comment_${0..9}
|
||||||
|
autoTableConfigs.add(getShardingAutoTableRuleConfiguration("community_dynamic_comment",
|
||||||
|
"ds",
|
||||||
|
"dynamic_id", "communityDynamicCommentStrategy"));
|
||||||
|
|
||||||
|
//table和分表策略分开
|
||||||
|
Collection<ShardingTableRuleConfiguration> tableConfigs = new ArrayList<>();
|
||||||
|
// 账单按月分表
|
||||||
|
tableConfigs.add(getShardingTableRuleConfiguration("bill_record",
|
||||||
|
"ds.bill_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}",
|
||||||
|
"create_time", "billRecordStrategy"));
|
||||||
|
// 进出房间按月分表
|
||||||
|
tableConfigs.add(getShardingTableRuleConfiguration("user_in_out_room_record",
|
||||||
|
"ds.user_in_out_room_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}",
|
||||||
|
"in_time", "userInOutRoomRecordStrategy"));
|
||||||
|
//私聊按月分表
|
||||||
|
tableConfigs.add(getShardingTableRuleConfiguration("user_chat_msg_record",
|
||||||
|
"ds.user_chat_msg_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}",
|
||||||
|
"create_time", "userChatMsgRecordStrategy"));
|
||||||
|
|
||||||
|
//家族成员上下麦按月分表
|
||||||
|
tableConfigs.add(getShardingTableRuleConfiguration("family_member_room_mic_record",
|
||||||
|
"ds.family_member_room_mic_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}",
|
||||||
|
"up_time", "familyMemberRoomMicRecordStrategy"));
|
||||||
|
|
||||||
|
tableConfigs.add(getShardingTableRuleConfiguration("game_gold_log",
|
||||||
|
"ds.game_gold_log_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}",
|
||||||
|
"create_time", "gameGoldLogStrategy"));
|
||||||
|
|
||||||
|
tableConfigs.add(getShardingTableRuleConfiguration("gift_send_record",
|
||||||
|
"ds.gift_send_record_$->{20240914..20241231}",
|
||||||
|
"create_time", "giftSendRecordStrategy"));
|
||||||
|
|
||||||
|
tableConfigs.add(getShardingTableRuleConfiguration("lucky_24_record",
|
||||||
|
"ds.lucky_24_record_$->{20240914..20241231}",
|
||||||
|
"create_time", "lucky24RecordStrategy"));
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, AlgorithmConfiguration> algorithmsConfigs = new HashMap<>();
|
||||||
|
// 账单按月分表
|
||||||
|
AlgorithmConfiguration billRecordShardingAlgorithm = getBillRecordShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("billRecordStrategy", billRecordShardingAlgorithm);
|
||||||
|
// 动态评论按动态id分表
|
||||||
|
AlgorithmConfiguration communityDynamicCommentShardingAlgorithm = getCommunityDynamicCommentShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("communityDynamicCommentStrategy", communityDynamicCommentShardingAlgorithm);
|
||||||
|
// 进出房间按月分表
|
||||||
|
AlgorithmConfiguration userInOutRoomRecordShardingAlgorithm = getUserInOutRoomRecordShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("userInOutRoomRecordStrategy", userInOutRoomRecordShardingAlgorithm);
|
||||||
|
//私聊按月分表
|
||||||
|
AlgorithmConfiguration userChatMsgRecordShardingAlgorithm = getUserChatMsgRecordShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("userChatMsgRecordStrategy", userChatMsgRecordShardingAlgorithm);
|
||||||
|
// 家族成员上下麦位记录
|
||||||
|
AlgorithmConfiguration familyMemberRoomMicRecordShardingAlgorithm = getFamilyMemberRoomMicRecordShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("familyMemberRoomMicRecordStrategy", familyMemberRoomMicRecordShardingAlgorithm);
|
||||||
|
//游戏日志
|
||||||
|
AlgorithmConfiguration gameGoldLogShardingAlgorithm = getGameGoldLogShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("gameGoldLogStrategy", gameGoldLogShardingAlgorithm);
|
||||||
|
//
|
||||||
|
AlgorithmConfiguration giftSendRecordShardingAlgorithm = getGiftSendRecordShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("giftSendRecordStrategy", giftSendRecordShardingAlgorithm);
|
||||||
|
//
|
||||||
|
AlgorithmConfiguration lucky24RecordShardingAlgorithm = getLucky24RecordShardingAlgorithmConfiguration();
|
||||||
|
algorithmsConfigs.put("lucky24RecordStrategy", lucky24RecordShardingAlgorithm);
|
||||||
|
|
||||||
|
ShardingRuleConfiguration config = new ShardingRuleConfiguration();
|
||||||
|
config.setTables(tableConfigs);
|
||||||
|
config.setAutoTables(autoTableConfigs);
|
||||||
|
config.setShardingAlgorithms(algorithmsConfigs);
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlgorithmConfiguration getLucky24RecordShardingAlgorithmConfiguration() {
|
||||||
|
return getGiftSendRecordShardingAlgorithmConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlgorithmConfiguration getGiftSendRecordShardingAlgorithmConfiguration() {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("datetime-pattern", DateTimeUtil.DEFAULT_DATETIME_PATTERN);
|
||||||
|
properties.setProperty("datetime-lower", "2024-04-23 00:00:00");
|
||||||
|
properties.setProperty("datetime-upper", "2024-12-31 23:59:59");
|
||||||
|
properties.setProperty("sharding-suffix-pattern", DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
||||||
|
properties.setProperty("datetime-interval-amount", "1");
|
||||||
|
properties.setProperty("datetime-interval-unit", "DAYS");
|
||||||
|
return new AlgorithmConfiguration("INTERVAL", properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlgorithmConfiguration getGameGoldLogShardingAlgorithmConfiguration() {
|
||||||
|
return getBillRecordShardingAlgorithmConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlgorithmConfiguration getFamilyMemberRoomMicRecordShardingAlgorithmConfiguration() {
|
||||||
|
return getBillRecordShardingAlgorithmConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* =====私聊消息表分表策略=====
|
||||||
|
**/
|
||||||
|
private AlgorithmConfiguration getUserChatMsgRecordShardingAlgorithmConfiguration() {
|
||||||
|
return getBillRecordShardingAlgorithmConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ShardingTableRuleConfiguration getShardingTableRuleConfiguration(String table, String nodes, String col, String strategyName) {
|
||||||
|
ShardingTableRuleConfiguration tableRuleConfiguration = new ShardingTableRuleConfiguration(table, nodes);
|
||||||
|
tableRuleConfiguration.setTableShardingStrategy(new StandardShardingStrategyConfiguration(col, strategyName));
|
||||||
|
return tableRuleConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ShardingAutoTableRuleConfiguration getShardingAutoTableRuleConfiguration(String table, String nodes, String col, String strategyName) {
|
||||||
|
ShardingAutoTableRuleConfiguration tableRuleConfiguration = new ShardingAutoTableRuleConfiguration(table, nodes);
|
||||||
|
tableRuleConfiguration.setShardingStrategy(new StandardShardingStrategyConfiguration(col, strategyName));
|
||||||
|
return tableRuleConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* =====账单表分表策略=====
|
||||||
|
**/
|
||||||
|
private AlgorithmConfiguration getBillRecordShardingAlgorithmConfiguration() {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("datetime-pattern", DateTimeUtil.DEFAULT_DATETIME_PATTERN);
|
||||||
|
properties.setProperty("datetime-lower", "2024-04-23 00:00:00");
|
||||||
|
properties.setProperty("datetime-upper", "2024-12-31 23:59:59");
|
||||||
|
properties.setProperty("sharding-suffix-pattern", DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
||||||
|
properties.setProperty("datetime-interval-amount", "1");
|
||||||
|
properties.setProperty("datetime-interval-unit", "MONTHS");
|
||||||
|
return new AlgorithmConfiguration("INTERVAL", properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* =======动态评论表分表策略===========
|
||||||
|
**/
|
||||||
|
private AlgorithmConfiguration getCommunityDynamicCommentShardingAlgorithmConfiguration() {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("sharding-count", "10");
|
||||||
|
return new AlgorithmConfiguration("MOD", properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* =====进出房记录表分表策略=====
|
||||||
|
**/
|
||||||
|
private AlgorithmConfiguration getUserInOutRoomRecordShardingAlgorithmConfiguration() {
|
||||||
|
return getBillRecordShardingAlgorithmConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1,57 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class BillRecordRangeShardingAlgorithm implements RangeShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> doSharding(Collection<String> collection, RangeShardingValue<Date> rangeShardingValue) {
|
|
||||||
Collection<String> collect = new HashSet<>();
|
|
||||||
|
|
||||||
Range<Date> valueRange = rangeShardingValue.getValueRange();
|
|
||||||
Date startTime = valueRange.lowerEndpoint();
|
|
||||||
Date endTime = valueRange.upperEndpoint();
|
|
||||||
|
|
||||||
// 跨度不宜过长
|
|
||||||
int days = DateTimeUtil.compareDay(endTime, startTime);
|
|
||||||
if(days > 120) {
|
|
||||||
//三个月前
|
|
||||||
Calendar instance = Calendar.getInstance();
|
|
||||||
instance.add(Calendar.MONTH,-3);
|
|
||||||
Date threeMonthBefore = instance.getTime();
|
|
||||||
startTime = threeMonthBefore;
|
|
||||||
}
|
|
||||||
|
|
||||||
startTime = DateTimeUtil.getBeginTimeOfMonth(startTime);
|
|
||||||
endTime = DateTimeUtil.getEndTimeOfMonth(endTime);
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
String tableSuffix = each.substring(each.lastIndexOf("_") + 1);
|
|
||||||
Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) {
|
|
||||||
collect.add(each);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return collect;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,36 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class BillRecordShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {
|
|
||||||
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
String suffixTime = formatter.format(preciseShardingValue.getValue());
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
if (each.endsWith(suffixTime)) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,28 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动态评论分表策略
|
|
||||||
* @date 2019-11-27 15:45
|
|
||||||
* @author fangchengyan
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public final class DynamicCommentShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Long> shardingValue) {
|
|
||||||
|
|
||||||
for (String each : availableTargetNames) {
|
|
||||||
if (each.endsWith(shardingValue.getValue() % 10 + "")) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,57 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class FamilyMemberRoomMicRecordRangeShardingAlgorithm implements RangeShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> doSharding(Collection<String> collection, RangeShardingValue<Date> rangeShardingValue) {
|
|
||||||
Collection<String> collect = new HashSet<>();
|
|
||||||
|
|
||||||
Range<Date> valueRange = rangeShardingValue.getValueRange();
|
|
||||||
Date startTime = valueRange.lowerEndpoint();
|
|
||||||
Date endTime = valueRange.upperEndpoint();
|
|
||||||
|
|
||||||
// 跨度不宜过长
|
|
||||||
int days = DateTimeUtil.compareDay(endTime, startTime);
|
|
||||||
if(days > 120) {
|
|
||||||
//三个月前
|
|
||||||
Calendar instance = Calendar.getInstance();
|
|
||||||
instance.add(Calendar.MONTH,-3);
|
|
||||||
Date threeMonthBefore = instance.getTime();
|
|
||||||
startTime = threeMonthBefore;
|
|
||||||
}
|
|
||||||
|
|
||||||
startTime = DateTimeUtil.getBeginTimeOfMonth(startTime);
|
|
||||||
endTime = DateTimeUtil.getEndTimeOfMonth(endTime);
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
String tableSuffix = each.substring(each.lastIndexOf("_") + 1);
|
|
||||||
Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) {
|
|
||||||
collect.add(each);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return collect;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,36 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class FamilyMemberRoomMicRecordShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {
|
|
||||||
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
String suffixTime = formatter.format(preciseShardingValue.getValue());
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
if (each.endsWith(suffixTime)) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,57 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class GameGoldLogRangeShardingAlgorithm implements RangeShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> doSharding(Collection<String> collection, RangeShardingValue<Date> rangeShardingValue) {
|
|
||||||
Collection<String> collect = new HashSet<>();
|
|
||||||
|
|
||||||
Range<Date> valueRange = rangeShardingValue.getValueRange();
|
|
||||||
Date startTime = valueRange.lowerEndpoint();
|
|
||||||
Date endTime = valueRange.upperEndpoint();
|
|
||||||
|
|
||||||
// 跨度不宜过长
|
|
||||||
int days = DateTimeUtil.compareDay(endTime, startTime);
|
|
||||||
if(days > 120) {
|
|
||||||
//三个月前
|
|
||||||
Calendar instance = Calendar.getInstance();
|
|
||||||
instance.add(Calendar.MONTH,-3);
|
|
||||||
Date threeMonthBefore = instance.getTime();
|
|
||||||
startTime = threeMonthBefore;
|
|
||||||
}
|
|
||||||
|
|
||||||
startTime = DateTimeUtil.getBeginTimeOfMonth(startTime);
|
|
||||||
endTime = DateTimeUtil.getEndTimeOfMonth(endTime);
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
String tableSuffix = each.substring(each.lastIndexOf("_") + 1);
|
|
||||||
Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) {
|
|
||||||
collect.add(each);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return collect;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,36 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class GameGoldLogShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {
|
|
||||||
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
String suffixTime = formatter.format(preciseShardingValue.getValue());
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
if (each.endsWith(suffixTime)) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,51 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class GiftSendRecordRangeShardingAlgorithm implements RangeShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> doSharding(Collection<String> collection, RangeShardingValue<Date> rangeShardingValue) {
|
|
||||||
Range<Date> valueRange = rangeShardingValue.getValueRange();
|
|
||||||
Date startTime = valueRange.lowerEndpoint();
|
|
||||||
Date endTime = valueRange.upperEndpoint();
|
|
||||||
|
|
||||||
// 跨度不宜过长
|
|
||||||
int days = DateTimeUtil.compareDay(endTime, startTime);
|
|
||||||
if(days > 120) {
|
|
||||||
//三个月前
|
|
||||||
Calendar instance = Calendar.getInstance();
|
|
||||||
instance.add(Calendar.MONTH,-3);
|
|
||||||
Date threeMonthBefore = instance.getTime();
|
|
||||||
startTime = threeMonthBefore;
|
|
||||||
}
|
|
||||||
|
|
||||||
Date finalStartTime = DateTimeUtil.getBeginTimeOfMonth(startTime);
|
|
||||||
Date finalEndTime = DateTimeUtil.getEndTimeOfMonth(endTime);
|
|
||||||
return collection.parallelStream().filter(each->{
|
|
||||||
String tableSuffix = each.substring(each.lastIndexOf("_") + 1);
|
|
||||||
Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
|
||||||
return null != tableSuffixDate && finalStartTime.compareTo(tableSuffixDate) <= 0 && finalEndTime.compareTo(tableSuffixDate) >= 0;
|
|
||||||
}).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,36 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class GiftSendRecordShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {
|
|
||||||
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
|
||||||
String suffixTime = formatter.format(preciseShardingValue.getValue());
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
if (each.endsWith(suffixTime)) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,51 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class Lucky24RecordRangeShardingAlgorithm implements RangeShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> doSharding(Collection<String> collection, RangeShardingValue<Date> rangeShardingValue) {
|
|
||||||
Range<Date> valueRange = rangeShardingValue.getValueRange();
|
|
||||||
Date startTime = valueRange.lowerEndpoint();
|
|
||||||
Date endTime = valueRange.upperEndpoint();
|
|
||||||
|
|
||||||
// 跨度不宜过长
|
|
||||||
int days = DateTimeUtil.compareDay(endTime, startTime);
|
|
||||||
if(days > 120) {
|
|
||||||
//三个月前
|
|
||||||
Calendar instance = Calendar.getInstance();
|
|
||||||
instance.add(Calendar.MONTH,-3);
|
|
||||||
Date threeMonthBefore = instance.getTime();
|
|
||||||
startTime = threeMonthBefore;
|
|
||||||
}
|
|
||||||
|
|
||||||
Date finalStartTime = DateTimeUtil.getBeginTimeOfMonth(startTime);
|
|
||||||
Date finalEndTime = DateTimeUtil.getEndTimeOfMonth(endTime);
|
|
||||||
return collection.parallelStream().filter(each->{
|
|
||||||
String tableSuffix = each.substring(each.lastIndexOf("_") + 1);
|
|
||||||
Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
|
||||||
return null != tableSuffixDate && finalStartTime.compareTo(tableSuffixDate) <= 0 && finalEndTime.compareTo(tableSuffixDate) >= 0;
|
|
||||||
}).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,36 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class Lucky24RecordShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {
|
|
||||||
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
|
||||||
String suffixTime = formatter.format(preciseShardingValue.getValue());
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
if (each.endsWith(suffixTime)) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,48 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author: liaozetao
|
|
||||||
* @date: 2023/9/21 16:48
|
|
||||||
* @description:
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class UserChatMsgRecordRangeShardingAlgorithm implements RangeShardingAlgorithm<Date> {
|
|
||||||
@Override
|
|
||||||
public Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<Date> shardingValue) {
|
|
||||||
Collection<String> collect = new HashSet<>();
|
|
||||||
Range<Date> valueRange = shardingValue.getValueRange();
|
|
||||||
Date startTime = valueRange.lowerEndpoint();
|
|
||||||
Date endTime = valueRange.upperEndpoint();
|
|
||||||
// 跨度不宜过长
|
|
||||||
int days = DateTimeUtil.compareDay(endTime, startTime);
|
|
||||||
if (days > 120) {
|
|
||||||
//三个月前
|
|
||||||
Calendar instance = Calendar.getInstance();
|
|
||||||
instance.add(Calendar.MONTH, -3);
|
|
||||||
startTime = instance.getTime();
|
|
||||||
}
|
|
||||||
startTime = DateTimeUtil.getBeginTimeOfMonth(startTime);
|
|
||||||
endTime = DateTimeUtil.getEndTimeOfMonth(endTime);
|
|
||||||
for (String each : availableTargetNames) {
|
|
||||||
String tableSuffix = each.substring(each.lastIndexOf(StrUtil.UNDERLINE) + 1);
|
|
||||||
Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
assert tableSuffixDate != null;
|
|
||||||
if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) {
|
|
||||||
collect.add(each);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return collect;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,30 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author: liaozetao
|
|
||||||
* @date: 2023/9/21 16:47
|
|
||||||
* @description:
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class UserChatMsgRecordShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
|
|
||||||
@Override
|
|
||||||
public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Date> shardingValue) {
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
String suffixTime = formatter.format(shardingValue.getValue());
|
|
||||||
for (String each : availableTargetNames) {
|
|
||||||
if (each.endsWith(suffixTime)) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,57 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class UserInOutRoomRecordRangeShardingAlgorithm implements RangeShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> doSharding(Collection<String> collection, RangeShardingValue<Date> rangeShardingValue) {
|
|
||||||
Collection<String> collect = new HashSet<>();
|
|
||||||
|
|
||||||
Range<Date> valueRange = rangeShardingValue.getValueRange();
|
|
||||||
Date startTime = valueRange.lowerEndpoint();
|
|
||||||
Date endTime = valueRange.upperEndpoint();
|
|
||||||
|
|
||||||
// 跨度不宜过长
|
|
||||||
int days = DateTimeUtil.compareDay(endTime, startTime);
|
|
||||||
if(days > 120) {
|
|
||||||
//三个月前
|
|
||||||
Calendar instance = Calendar.getInstance();
|
|
||||||
instance.add(Calendar.MONTH,-3);
|
|
||||||
Date threeMonthBefore = instance.getTime();
|
|
||||||
startTime = threeMonthBefore;
|
|
||||||
}
|
|
||||||
|
|
||||||
startTime = DateTimeUtil.getBeginTimeOfMonth(startTime);
|
|
||||||
endTime = DateTimeUtil.getEndTimeOfMonth(endTime);
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
String tableSuffix = each.substring(each.lastIndexOf("_") + 1);
|
|
||||||
Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) {
|
|
||||||
collect.add(each);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return collect;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,36 +0,0 @@
|
|||||||
package com.accompany.sharding.shardingalgorithm;
|
|
||||||
|
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
|
|
||||||
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
|
|
||||||
*
|
|
||||||
* @Author yubin
|
|
||||||
* @Description
|
|
||||||
* @Date 2019-07-20 00:45
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class UserInOutRoomRecordShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {
|
|
||||||
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH);
|
|
||||||
String suffixTime = formatter.format(preciseShardingValue.getValue());
|
|
||||||
|
|
||||||
for (String each : collection) {
|
|
||||||
if (each.endsWith(suffixTime)) {
|
|
||||||
return each;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -71,7 +71,8 @@
|
|||||||
<hippo4j-config-spring-boot-starter.version>1.5.0</hippo4j-config-spring-boot-starter.version>
|
<hippo4j-config-spring-boot-starter.version>1.5.0</hippo4j-config-spring-boot-starter.version>
|
||||||
<alipay-sdk-java.version>3.7.110.ALL</alipay-sdk-java.version>
|
<alipay-sdk-java.version>3.7.110.ALL</alipay-sdk-java.version>
|
||||||
<google-api-services-androidpublisher.version>v3-rev24-1.24.1</google-api-services-androidpublisher.version>
|
<google-api-services-androidpublisher.version>v3-rev24-1.24.1</google-api-services-androidpublisher.version>
|
||||||
<sharding-jdbc-core.version>4.1.1</sharding-jdbc-core.version>
|
<payermax-server.version>1.0.12</payermax-server.version>
|
||||||
|
<sharding-jdbc-core.version>5.4.1</sharding-jdbc-core.version>
|
||||||
<commons-lang.version>2.6</commons-lang.version>
|
<commons-lang.version>2.6</commons-lang.version>
|
||||||
<tencentcloud-sdk-java.version>3.1.781</tencentcloud-sdk-java.version>
|
<tencentcloud-sdk-java.version>3.1.781</tencentcloud-sdk-java.version>
|
||||||
<tencentcloud-cos-sdk-java.version>5.6.179</tencentcloud-cos-sdk-java.version>
|
<tencentcloud-cos-sdk-java.version>5.6.179</tencentcloud-cos-sdk-java.version>
|
||||||
|
Reference in New Issue
Block a user