From b0254c5a17b3915eb00fdcb33f0eea222cff78ee Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期三, 06 三月 2024 15:06:54 +0800
Subject: [PATCH] Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/PlayPai

---
 cloud-server-communityWorldCup/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java |  134 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 134 insertions(+), 0 deletions(-)

diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
new file mode 100644
index 0000000..81fd0e4
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
@@ -0,0 +1,134 @@
+package com.dsh.config.Sharding_jdbc;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
+import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.*;
+
+@Configuration
+public class ShardingConfig {
+
+    @Autowired
+    private Master0DataSource master0DataSource;
+
+
+    @Bean
+    public DataSource getDataSource() {
+        DataSource dataSource = null;
+        try {
+            Properties properties = new Properties();
+            properties.setProperty("sql-show", "true");
+            String databaseName = "m_0";//真实数据源名称,多个数据源用逗号区分
+            dataSource = ShardingSphereDataSourceFactory.createDataSource(databaseName, createDataSourceMap(), createShardingRuleConfiguration(), properties);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return dataSource;
+    }
+
+
+    /**
+     * 配置多数据源
+     *
+     * @return
+     */
+    private Map<String, DataSource> createDataSourceMap() {
+        Map<String, DataSource> dataSourceMap = new HashMap<>();
+        // 配置第 1 个数据源
+        DruidDataSource dataSource1 = new DruidDataSource();
+        dataSource1.setDriverClassName(master0DataSource.getDriverClassName());
+        dataSource1.setUrl(master0DataSource.getUrl());
+        dataSource1.setUsername(master0DataSource.getUsername());
+        dataSource1.setPassword(master0DataSource.getPassword());
+        dataSource1.setMaxActive(master0DataSource.getMaxActive());
+        dataSource1.setMaxWait(master0DataSource.getMaxWait());
+        dataSource1.setMinIdle(master0DataSource.getMinIdle());
+        dataSource1.setInitialSize(master0DataSource.getInitialSize());
+        dataSourceMap.put("m_0", dataSource1);
+        return dataSourceMap;
+    }
+
+
+    /**
+     * 分片配置
+     *
+     * @return
+     */
+    private Collection<RuleConfiguration> createShardingRuleConfiguration() {
+        LinkedList<RuleConfiguration> linkedList = new LinkedList();
+
+        //分片规则配置
+        ShardingRuleConfiguration result1 = new ShardingRuleConfiguration();
+        result1.getTables().add(getWorldCupCompetitorTableRuleConfiguration());
+        Properties props1 = new Properties();
+        props1.setProperty("algorithm-expression", "t_world_cup_competitor$->{worldCupId % 5 + 1}");
+        result1.getShardingAlgorithms().put("t_world_cup_competitor-inline", new AlgorithmConfiguration("INLINE", props1));
+        result1.getKeyGenerators().put("t_world_cup_competitor-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
+
+        //分片规则配置
+        result1.getTables().add(getWorldCupPaymentTableRuleConfiguration());
+        Properties props2 = new Properties();
+        props2.setProperty("algorithm-expression", "t_world_cup_payment$->{worldCupId % 5 + 1}");
+        result1.getShardingAlgorithms().put("t_world_cup_payment-inline", new AlgorithmConfiguration("INLINE", props2));
+        result1.getKeyGenerators().put("t_world_cup_payment-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
+
+        //分片规则配置
+        result1.getTables().add(getWorldCupPaymentParticipantTableRuleConfiguration());
+        Properties props3 = new Properties();
+        props3.setProperty("algorithm-expression", "t_world_cup_payment_participant$->{worldCupId % 5 + 1}");
+        result1.getShardingAlgorithms().put("t_world_cup_payment_participant-inline", new AlgorithmConfiguration("INLINE", props3));
+        result1.getKeyGenerators().put("t_world_cup_payment_participant-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
+
+        linkedList.add(result1);
+        return linkedList;
+    }
+
+    /**
+     * 分片算法配置
+     *
+     * @return
+     */
+    private ShardingTableRuleConfiguration getWorldCupCompetitorTableRuleConfiguration() {
+        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_world_cup_competitor", "m_$->{0}.t_world_cup_competitor$->{1..5}");//50
+        result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("worldCupId", "t_world_cup_competitor-inline"));
+        result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_world_cup_competitor-snowflake"));
+        return result;
+    }
+
+
+    /**
+     * 分片算法配置
+     *
+     * @return
+     */
+    private ShardingTableRuleConfiguration getWorldCupPaymentTableRuleConfiguration() {
+        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_world_cup_payment", "m_$->{0}.t_world_cup_payment$->{1..5}");//50
+        result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("worldCupId", "t_world_cup_payment-inline"));
+        result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_world_cup_payment-snowflake"));
+        return result;
+    }
+
+
+    /**
+     * 分片算法配置
+     *
+     * @return
+     */
+    private ShardingTableRuleConfiguration getWorldCupPaymentParticipantTableRuleConfiguration() {
+        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_world_cup_payment_participant", "m_$->{0}.t_world_cup_payment_participant$->{1..5}");//50
+        result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("worldCupId", "t_world_cup_payment_participant-inline"));
+        result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_world_cup_payment_participant-snowflake"));
+        return result;
+    }
+}

--
Gitblit v1.7.1