pom-sharding-升级
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shardingsphere</groupId>
|
||||
<artifactId>sharding-jdbc-core</artifactId>
|
||||
<artifactId>shardingsphere-jdbc-core</artifactId>
|
||||
<version>${sharding-jdbc-core.version}</version>
|
||||
</dependency>
|
||||
</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>
|
||||
<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>
|
||||
<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>
|
||||
<tencentcloud-sdk-java.version>3.1.781</tencentcloud-sdk-java.version>
|
||||
<tencentcloud-cos-sdk-java.version>5.6.179</tencentcloud-cos-sdk-java.version>
|
||||
|
Reference in New Issue
Block a user