diff --git a/src/main/java/com/sqx/config/ShardingConfig.java b/src/main/java/com/sqx/config/ShardingConfig.java index 297a772f..9d8adeb2 100644 --- a/src/main/java/com/sqx/config/ShardingConfig.java +++ b/src/main/java/com/sqx/config/ShardingConfig.java @@ -9,17 +9,16 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; +import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration; import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import javax.annotation.PostConstruct; import javax.sql.DataSource; import java.sql.SQLException; import java.util.*; -import java.util.stream.Collectors; /** @@ -31,6 +30,9 @@ import java.util.stream.Collectors; @ConfigurationProperties(prefix = "spring.shardingsphere") public class ShardingConfig { + @Value("${spring.profiles.active}") + private String activeProfile; + /** * 读取数据源信息 */ @@ -49,12 +51,46 @@ public class ShardingConfig { */ private String centerTablesDataNode; - /** * 中心表,不进行分库操作 */ - private List centerTables; + private Set centerTables; + /** + * 区域库的节点 + */ + private String regionTablesDataNode; + + /** + * 区域表分库策略的字段 + */ + private String regionTablesShardingDatabaseColumn; + + /** + * 区域表分库的算法 + */ + private String regionTablesShardingDatabaseAlgorithm; + + /** + * 分库表,通过userId进行分库 + */ + private Set regionTables; + + + /** + * 区域表分库策略的字段 + */ + private String courseDetailsShardingDatabaseColumn; + + /** + * 区域表分库的算法 + */ + private String courseDetailsShardingDatabaseAlgorithm; + + /** + * 分库表,通过userId进行分库 + */ + private Set courseDetails; /** * 配置sharding-jdbc数据源 @@ -88,15 +124,36 @@ public class ShardingConfig { String.format(centerTablesDataNode, centerTable)); sets.add(tableRuleConfig); } + if ("prod".equals(activeProfile)) { + // 定义区域表的分库规则 + InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration( + regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm); + for (String regionTable : regionTables) { + TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable)); + tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig); + sets.add(tableRuleConfig); + } -// // 定义区域表的分库规则 -// InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration( -// regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm); -// for (String regionTable : regionTables) { -// TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable)); -// tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig); -// sets.add(tableRuleConfig); -// } + // 定义区域表的分库规则 + InlineShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new InlineShardingStrategyConfiguration( + courseDetailsShardingDatabaseColumn, courseDetailsShardingDatabaseAlgorithm); + for (String regionTable : courseDetails) { + TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable)); + tableRuleConfig.setDatabaseShardingStrategyConfig(courseDetailsShardingStrategyConfig); + sets.add(tableRuleConfig); + } + }else { + for (String centerTable : regionTables) { + TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(centerTable, + String.format(centerTablesDataNode, centerTable)); + sets.add(tableRuleConfig); + } + for (String centerTable : courseDetails) { + TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(centerTable, + String.format(centerTablesDataNode, centerTable)); + sets.add(tableRuleConfig); + } + } return sets; } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index cdee1a59..20850d41 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -21,9 +21,10 @@ connection-timeout: 30000 spring: # sharding-jdbc 配置 shardingsphere: - center-tables-data-node: duanju.%s # 显示sharding-jdbc改写的sql语句 show-sql: false + + center-tables-data-node: duanju.%s # 数据源名称 datasource: # 数据源配置begin diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 0ab4e7de..95687182 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -1,9 +1,9 @@ swagger: - enabled: true + enabled: false pay: - h5BaseUrl: https://video-h5.hnsiyao.cn/me/detail/detail?allId= - orderNotifyUrl: https://video.hnsiyao.cn/czg/app/wuyou/notify - extractNotifyUrl: https://video.hnsiyao.cn/czg/app/wuyou/extractNotify + h5BaseUrl: https://dj-h5.hnsiyao.cn/me/detail/detail?allId= + orderNotifyUrl: https://pay.hnsiyao.cn/czg/app/wuyou/notify + extractNotifyUrl: https://pay.hnsiyao.cn/czg/app/wuyou/extractNotify # 数据源的一些配置 driver-class-name: com.mysql.cj.jdbc.Driver @@ -22,14 +22,24 @@ spring: # sharding-jdbc 配置 shardingsphere: center-tables-data-node: duanju.%s + # 区域表的数据源节点 + region-tables-data-node: duanju-$->{0..4}.%s + # 区域分库策略的计算字段 + region-tables-sharding-database-column: user_id + # 分库的计算方法 + region-tables-sharding-database-algorithm: duanju-$->{Math.abs(user_id) % 5} + + # 短剧集表 拆分 + course_details-sharding-database-column: course_id + course_details-sharding-database-algorithm: duanju-$->{Math.abs(course_id) % 5} + # 显示sharding-jdbc改写的sql语句 show-sql: false # 数据源名称 datasource: - # 数据源配置begin - master-0: + master: driver-class-name: ${driver-class-name} - jdbc-url: jdbc:mysql://rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT + jdbc-url: jdbc:mysql://rm-gc7xx913734hv5w5q.mysql.cn-chengdu.rds.aliyuncs.com/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT username: video_user password: VideoUser@1 minimum-idle: ${minimum-idle} @@ -37,11 +47,112 @@ spring: idle-timeout: ${idle-timeout} max-lifetime: ${max-lifetime} connection-timeout: ${connection-timeout} + # 数据源配置begin + master-0: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-1: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-2: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-3: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-4: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} slave-0: driver-class-name: ${driver-class-name} - jdbc-url: jdbc:mysql://47.122.26.160:3306/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT - username: root - password: 0fd6497c308ccfa8 + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-1: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-2: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-3: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-4: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: minimum-idle: ${minimum-idle} maximum-pool-size: ${maximum-pool-size} idle-timeout: ${idle-timeout} @@ -53,6 +164,21 @@ spring: master-slave-rules: #数据源 duanju: + master-data-source-name: master + slave-data-source-names: slave + duanju-0: master-data-source-name: master-0 - slave-data-source-names: - - slave-0 \ No newline at end of file + slave-data-source-names: slave-0 + duanju-1: + master-data-source-name: master-1 + slave-data-source-names: slave-1 + duanju-2: + master-data-source-name: master-2 + slave-data-source-names: slave-2 + duanju-3: + master-data-source-name: master-3 + slave-data-source-names: slave-3 + duanju-4: + master-data-source-name: master-4 + slave-data-source-names: slave-4 + diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 3842933f..57e2839e 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -21,13 +21,24 @@ connection-timeout: 30000 spring: # sharding-jdbc 配置 shardingsphere: - center-tables-data-node: duanju.%s # 显示sharding-jdbc改写的sql语句 show-sql: false + + center-tables-data-node: duanju.%s + # 区域表的数据源节点 + region-tables-data-node: duanju-$->{0..4}.%s + # 区域分库策略的计算字段 + region-tables-sharding-database-column: user_id + # 分库的计算方法 + region-tables-sharding-database-algorithm: duanju-$->{Math.abs(user_id) % 5} + + # 短剧集表 拆分 + course_details-sharding-database-column: course_id + course_details-sharding-database-algorithm: duanju-$->{Math.abs(course_id) % 5} + # 数据源名称 datasource: - # 数据源配置begin - master-0: + master: driver-class-name: ${driver-class-name} jdbc-url: jdbc:mysql://rm-gc7xx913734hv5w5q.mysql.cn-chengdu.rds.aliyuncs.com/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT username: video_user @@ -37,31 +48,112 @@ spring: idle-timeout: ${idle-timeout} max-lifetime: ${max-lifetime} connection-timeout: ${connection-timeout} -# slave-0: -# driver-class-name: ${driver-class-name} -# jdbc-url: jdbc:mysql://localhost:3306/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT -# username: root -# password: acddb0c84a192ada -# minimum-idle: ${minimum-idle} -# maximum-pool-size: ${maximum-pool-size} -# idle-timeout: ${idle-timeout} -# max-lifetime: ${max-lifetime} -# connection-timeout: ${connection-timeout} -# slave-1: -# driver-class-name: ${driver-class-name} -# jdbc-url: jdbc:mysql://172.18.96.9:3306/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT -# username: root -# password: VideoUser1@ -# minimum-idle: ${minimum-idle} -# maximum-pool-size: ${maximum-pool-size} -# idle-timeout: ${idle-timeout} -# max-lifetime: ${max-lifetime} -# connection-timeout: ${connection-timeout} + # 数据源配置begin + master-0: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-1: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-2: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-3: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + master-4: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-0: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-1: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} slave-2: driver-class-name: ${driver-class-name} - jdbc-url: jdbc:mysql://172.18.96.8:3306/duanju?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT - username: root - password: VideoUser1@ + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-3: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: + minimum-idle: ${minimum-idle} + maximum-pool-size: ${maximum-pool-size} + idle-timeout: ${idle-timeout} + max-lifetime: ${max-lifetime} + connection-timeout: ${connection-timeout} + slave-4: + driver-class-name: ${driver-class-name} + jdbc-url: + username: + password: minimum-idle: ${minimum-idle} maximum-pool-size: ${maximum-pool-size} idle-timeout: ${idle-timeout} @@ -73,9 +165,21 @@ spring: master-slave-rules: #数据源 duanju: + master-data-source-name: master + slave-data-source-names: slave + duanju-0: master-data-source-name: master-0 -# slave-data-source-names: slave-0,slave-1,slave-2 + slave-data-source-names: slave-0 + duanju-1: + master-data-source-name: master-1 + slave-data-source-names: slave-1 + duanju-2: + master-data-source-name: master-2 slave-data-source-names: slave-2 -# - slave-0 -# - slave-1 -# - slave-2 + duanju-3: + master-data-source-name: master-3 + slave-data-source-names: slave-3 + duanju-4: + master-data-source-name: master-4 + slave-data-source-names: slave-4 + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 8ba8123c..02e4d86f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -65,7 +65,7 @@ spring: allow-bean-definition-overriding: true # 环境 dev|test|prod profiles: - active: local + active: dev # jackson时间格式化 jackson: time-zone: GMT+8 @@ -93,74 +93,79 @@ spring: # pathmatch: # matching-strategy: ant_path_matcher shardingsphere: - center-tables: - - activity - - app - - banner - - cash_out - - comment_good - - common_info - - complet_award - - coupon - - coupon_user - - course - - course_classification - - course_collect - - course_comment + # 短剧集表 通过course_id 分 + course-details: - course_details - - course_user - - disc_spinning - - disc_spinning_amount - - disc_spinning_record - - help_classify - - help_word - - invite - - invite_award - - invite_money - - message_info - - msg + #分库表 通过user_Id分 + region-tables: + - user_money_details - orders - - pay_classify + - course_collect - pay_details - - qrtz_blob_triggers - - qrtz_calendars - - qrtz_cron_triggers - - qrtz_fired_triggers - - qrtz_job_details - - qrtz_locks - - qrtz_paused_trigger_grps - - qrtz_scheduler_state - - qrtz_simple_triggers - - qrtz_simprop_triggers - - qrtz_triggers - - schedule_job + - disc_spinning_record + - cash_out + - course_user + - tb_user + - task_center_record + - user_money + - user_sign_record + - invite_achievement + - invite_money + #中心表 + center-tables: + - message_info - schedule_job_log + - invite + - msg + - sys_role_menu - sdk_info + - course + - user_integral_details + - common_info + - sys_log + - user_vip + - uni_ad_callback_record + - sys_user_role + - sys_menu + - comment_good + - sys_user + - course_comment + - banner + - disc_spinning + - course_classification + - task_center - sdk_type - - search - - sys_captcha + - task_center_reward + - schedule_job + - help_word + - help_classify + - disc_spinning_amount + - activity + - vip_details + - sys_role + - pay_classify + - app + - invite_award + - complet_award + - url_address - sys_config - sys_dict - - sys_log - - sys_menu - sys_oss - - sys_role - - sys_role_menu - - sys_user - - sys_user_role - - sys_user_token - - task_center - - task_center_record - - task_center_reward - - tb_user - - uni_ad_callback_record - - url_address - - user_integral - - user_integral_details - - user_money - - user_money_details + - search + - coupon_user + - coupon - user_prize_exchange - - user_sign_record - - user_vip - - vip_details - - invite_achievement \ No newline at end of file + - user_integral + - sys_user_token + - sys_captcha + - qrtz_triggers + - qrtz_simprop_triggers + - qrtz_simple_triggers + - qrtz_scheduler_state + - qrtz_paused_trigger_grps + - qrtz_locks + - qrtz_job_details + - qrtz_fired_triggers + - qrtz_cron_triggers + - qrtz_calendars + - qrtz_blob_triggers \ No newline at end of file