فهرست منبع

shardingjdbc 整合测试

xucaiqin 2 سال پیش
والد
کامیت
89b9ab2794
15فایلهای تغییر یافته به همراه694 افزوده شده و 16 حذف شده
  1. 55 5
      sckw-common/sckw-common-datasource/pom.xml
  2. 161 0
      sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/config/ShardingJdbcAutoConfig.java
  3. 46 0
      sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/properties/RuleConfiguration.java
  4. 29 0
      sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/properties/ShardingJdbcProperties.java
  5. 50 0
      sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/properties/ShardingStrategyCon.java
  6. 1 0
      sckw-common/sckw-common-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  7. 51 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/TestController.java
  8. 28 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/DbJoinDao.java
  9. 16 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/TStudentMapper.java
  10. 1 5
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/SysArea.java
  11. 85 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/TStudent.java
  12. 59 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/TestService.java
  13. 68 6
      sckw-modules/sckw-system/src/main/resources/bootstrap-dev.yml
  14. 21 0
      sckw-modules/sckw-system/src/main/resources/mapper/DbJoinDao.xml
  15. 23 0
      sckw-modules/sckw-system/src/main/resources/mapper/TStudentMapper.xml

+ 55 - 5
sckw-common/sckw-common-datasource/pom.xml

@@ -23,6 +23,7 @@
         <mybatis-plus.version>3.5.3.1</mybatis-plus.version>
         <dynamic-datasource.version>3.6.1</dynamic-datasource.version>
         <latest.release.version>5.2.0</latest.release.version>
+        <shardingsphere-jdbc.version>5.3.0</shardingsphere-jdbc.version>
     </properties>
 
 
@@ -45,13 +46,62 @@
             <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
             <version>${dynamic-datasource.version}</version>
         </dependency>
-
-        <!--ShardingSphere-JDBC-->
+        <!--sharding-jdbc-->
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-jdbc-core</artifactId>
+            <version>${shardingsphere-jdbc.version}</version>
+            <exclusions>
+                <!--排查logback日志-->
+                <exclusion>
+                    <groupId>ch.qos.logback</groupId>
+                    <artifactId>logback-classic</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!--shardingsphere集群模式注册到nacos-->
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
-            <version>${latest.release.version}</version>
+            <artifactId>shardingsphere-cluster-mode-repository-nacos</artifactId>
+            <version>${shardingsphere-jdbc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-sharding-api</artifactId>
+            <version>${shardingsphere-jdbc.version}</version>
         </dependency>
     </dependencies>
-
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.2.4</version>
+                <configuration>
+                    <createDependencyReducedPom>false</createDependencyReducedPom>
+                    <filters>
+                        <filter>
+                            <artifact>*:*</artifact>
+                            <excludes>
+                                <exclude>META-INF/services/**</exclude>
+                            </excludes>
+                        </filter>
+                    </filters>
+                    <transformers>
+                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                            <resource>META-INF/services/*</resource>
+                        </transformer>
+                    </transformers>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>

+ 161 - 0
sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/config/ShardingJdbcAutoConfig.java

@@ -0,0 +1,161 @@
+package com.sckw.datasource.config;
+
+import com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider;
+import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
+import com.sckw.datasource.properties.ShardingJdbcProperties;
+import com.zaxxer.hikari.HikariDataSource;
+import org.apache.commons.lang3.StringUtils;
+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.yaml.config.pojo.mode.YamlModeConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlPersistRepositoryConfiguration;
+import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
+import org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryConfiguration;
+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.audit.ShardingAuditStrategyConfiguration;
+import org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.CollectionUtils;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-09 13:18:33
+ */
+@Configuration
+@EnableConfigurationProperties(ShardingJdbcProperties.class)
+public class ShardingJdbcAutoConfig {
+    /**
+     * 动态数据源提供方,添加sharding-jdbc数据源
+     *
+     * @param dynamicDataSourceProperties
+     * @param shardingDataSource
+     * @return
+     */
+    @Bean
+    @ConditionalOnProperty(name = "spring.sharding.enable", havingValue = "true")
+    public DynamicDataSourceProvider dynamicDataSourceProvider(DynamicDataSourceProperties dynamicDataSourceProperties, DataSource shardingDataSource) {
+        Map<String, DataSourceProperty> datasourceMap = dynamicDataSourceProperties.getDatasource();
+        return new AbstractDataSourceProvider() {
+            @Override
+            public Map<String, DataSource> loadDataSources() {
+                Map<String, DataSource> dataSourceMap = createDataSourceMap(datasourceMap);
+                dataSourceMap.put("sharding", shardingDataSource);
+                return dataSourceMap;
+            }
+        };
+    }
+
+
+    /**
+     * sharding-jdbc数据源
+     *
+     * @param shardingJdbcProperties
+     * @return
+     * @throws SQLException
+     */
+    @Bean
+    public DataSource shardingDataSource(ShardingJdbcProperties shardingJdbcProperties) throws SQLException {
+        /*构建运行模式*/
+        YamlModeConfiguration modeConfig = shardingJdbcProperties.getMode();
+        ModeConfiguration modeConfiguration;
+        if (StringUtils.equals(modeConfig.getType(), "Standalone")) {
+            YamlPersistRepositoryConfiguration repository = modeConfig.getRepository();
+            modeConfiguration = new ModeConfiguration(modeConfig.getType(), new StandalonePersistRepositoryConfiguration(repository.getType(), repository.getProps()));
+        } else {
+            YamlPersistRepositoryConfiguration repository = modeConfig.getRepository();
+            Properties props = repository.getProps();
+            modeConfiguration = new ModeConfiguration(modeConfig.getType(), new ClusterPersistRepositoryConfiguration(repository.getType(), props.getProperty("namespace"), props.getProperty("server-lists"), props));
+        }
+        /*数据源*/
+        Map<String, DataSource> dataSourceMap = createDataSources(shardingJdbcProperties);
+        /*构建属性配置*/
+        Properties props = shardingJdbcProperties.getProps();
+        return ShardingSphereDataSourceFactory.createDataSource(/*shardingJdbcProperties.getDatabaseName(),*/ modeConfiguration, dataSourceMap, Collections.singleton(createShardingRuleConfiguration(shardingJdbcProperties)), props);
+    }
+
+    /**
+     * 构建具体规则
+     *
+     * @param shardingJdbcProperties
+     * @return
+     */
+    private ShardingRuleConfiguration createShardingRuleConfiguration(ShardingJdbcProperties shardingJdbcProperties) {
+        ShardingRuleConfiguration result = new ShardingRuleConfiguration();
+
+//        RuleConfiguration rules = shardingJdbcProperties.getRules();
+//        /*tables*/
+//        Map<String, ShardingTableRuleConfiguration> tables = rules.getTables();
+//        if (!CollectionUtils.isEmpty(tables)) {
+//            for (Map.Entry<String, ShardingTableRuleConfiguration> one : tables.entrySet()) {
+//                ShardingTableRuleConfiguration value = one.getValue();
+//                ShardingTableRuleConfiguration shardingTableRuleConfiguration = new ShardingTableRuleConfiguration(one.getKey(), value.getActualDataNodes());
+//                shardingTableRuleConfiguration.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_id", "snowflake"));
+//                shardingTableRuleConfiguration.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
+//                result.getTables().add(shardingTableRuleConfiguration);
+//            }
+//        }
+
+        result.getTables().add(getOrderTableRuleConfiguration());
+//        result.getTables().add(getOrderItemTableRuleConfiguration());
+//        result.getBindingTableGroups().add(new ShardingTableReferenceRuleConfiguration("a",new ShardingTableRuleConfiguration("",new Object())));
+//        result.getBroadcastTables().add("t_address");
+//        result.setDefaultDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("id", "t_student_inline"));
+//        Properties props = new Properties();
+//        props.setProperty("algorithm-expression", "t_student_{id % 2}");
+//        result.getShardingAlgorithms().put("t_student_inline", new AlgorithmConfiguration("INLINE", props));
+        result.getKeyGenerators().put("snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
+        result.getAuditors().put("sharding_key_required_auditor", new AlgorithmConfiguration("DML_SHARDING_CONDITIONS", new Properties()));
+        return result;
+    }
+
+    private ShardingTableRuleConfiguration getOrderTableRuleConfiguration() {
+        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_student", "t_student_${[0, 1]}");
+        result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "snowflake"));
+        result.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
+        return result;
+    }
+
+    private ShardingTableRuleConfiguration getOrderItemTableRuleConfiguration() {
+        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_teacher", "test{0..1}.t_teacher_${[0, 1]}");
+        result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "snowflake"));
+        return result;
+    }
+
+    /**
+     * 数据源
+     *
+     * @param shardingJdbcProperties
+     * @return
+     */
+    private Map<String, DataSource> createDataSources(ShardingJdbcProperties shardingJdbcProperties) {
+        Map<String, Map<String, String>> dataSources = shardingJdbcProperties.getDataSources();
+        if (!CollectionUtils.isEmpty(dataSources)) {
+            Map<String, DataSource> dataSourceMap = new HashMap<>();
+            for (Map.Entry<String, Map<String, String>> stringMapEntry : dataSources.entrySet()) {
+                Map<String, String> value = stringMapEntry.getValue();
+                HikariDataSource dataSource = new HikariDataSource();
+                dataSource.setDriverClassName(StringUtils.isNotBlank(value.get("driverClassName")) ? value.get("driverClassName") : "com.mysql.cj.jdbc.Driver");
+                dataSource.setJdbcUrl(value.get("jdbcUrl"));
+                dataSource.setUsername(value.get("username"));
+                dataSource.setPassword(value.get("password"));
+                dataSourceMap.put(stringMapEntry.getKey(), dataSource);
+            }
+            return dataSourceMap;
+        }
+        return new HashMap<>();
+    }
+}

+ 46 - 0
sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/properties/RuleConfiguration.java

@@ -0,0 +1,46 @@
+package com.sckw.datasource.properties;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableReferenceRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
+import org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
+
+import java.util.*;
+
+/**
+ * 自定义的rules
+ *
+ * @Author xucaiqin
+ * @date 2023-06-14 09:33:07
+ */
+@Getter
+@Setter
+public class RuleConfiguration {
+    private Map<String, ShardingTableRuleConfiguration> tables = new HashMap<>();
+
+    private List<ShardingAutoTableRuleConfiguration> autoTables = new ArrayList<>();
+
+    private List<ShardingTableReferenceRuleConfiguration> bindingTableGroups = new ArrayList<>();
+    //广播表是指在分库分表架构中的一种特殊表,它的数据会被复制到所有的数据节点上,而不进行分片
+    private List<String> broadcastTables = new ArrayList<>();
+
+    private ShardingStrategyCon defaultDatabaseShardingStrategy;
+
+    private ShardingStrategyCon defaultTableShardingStrategy;
+
+    private KeyGenerateStrategyConfiguration defaultKeyGenerateStrategy;
+
+    private ShardingAuditStrategyConfiguration defaultAuditStrategy;
+
+    private String defaultShardingColumn;
+
+    private Map<String, AlgorithmConfiguration> shardingAlgorithms = new LinkedHashMap<>();
+
+    private Map<String, AlgorithmConfiguration> keyGenerators = new LinkedHashMap<>();
+
+    private Map<String, AlgorithmConfiguration> auditors = new LinkedHashMap<>();
+}

+ 29 - 0
sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/properties/ShardingJdbcProperties.java

@@ -0,0 +1,29 @@
+package com.sckw.datasource.properties;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlModeConfiguration;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+
+import java.util.*;
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-09 13:35:27
+ */
+@Getter
+@Setter
+@RefreshScope
+@ConfigurationProperties(prefix = "spring.sharding")
+public class ShardingJdbcProperties {
+    private boolean enable;
+    private String databaseName;
+    private Map<String, Map<String, String>> dataSources = new HashMap<>();
+
+    private RuleConfiguration rules = new RuleConfiguration();
+
+    private YamlModeConfiguration mode;
+
+    private Properties props = new Properties();
+}

+ 50 - 0
sckw-common/sckw-common-datasource/src/main/java/com/sckw/datasource/properties/ShardingStrategyCon.java

@@ -0,0 +1,50 @@
+package com.sckw.datasource.properties;
+
+import org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-14 09:40:13
+ */
+
+public class ShardingStrategyCon implements ShardingStrategyConfiguration {
+    private String shardingColumns;
+    private String shardingColumn;
+
+    public String getShardingColumns() {
+        return shardingColumns;
+    }
+
+    public void setShardingColumns(String shardingColumns) {
+        this.shardingColumns = shardingColumns;
+    }
+
+    public String getShardingColumn() {
+        return shardingColumn;
+    }
+
+    public void setShardingColumn(String shardingColumn) {
+        this.shardingColumn = shardingColumn;
+    }
+
+    private String type;
+    private String shardingAlgorithmName;
+
+    @Override
+    public String getShardingAlgorithmName() {
+        return shardingAlgorithmName;
+    }
+
+    @Override
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setShardingAlgorithmName(String shardingAlgorithmName) {
+        this.shardingAlgorithmName = shardingAlgorithmName;
+    }
+}

+ 1 - 0
sckw-common/sckw-common-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -0,0 +1 @@
+com.sckw.datasource.config.ShardingJdbcAutoConfig

+ 51 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/TestController.java

@@ -0,0 +1,51 @@
+package com.sckw.system.controller;
+
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.system.service.TestService;
+import jakarta.annotation.Resource;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-02 17:30:32
+ */
+@Slf4j
+@AllArgsConstructor
+@RestController
+@RequestMapping("/")
+public class TestController {
+    @Resource
+    private TestService testService;
+
+    @GetMapping("get")
+    public HttpResult findByAccount(String account) {
+        return HttpResult.ok(account);
+    }
+
+    @GetMapping("testSlave")
+    public HttpResult test() {
+        return HttpResult.ok(testService.test());
+    }
+
+    @GetMapping("testMaster")
+    public HttpResult testMaster() {
+        return HttpResult.ok(testService.testMaster());
+    }
+
+    @GetMapping("testSharding")
+    public HttpResult testSharding() {
+        return HttpResult.ok(testService.testSharding());
+    }
+
+
+    @GetMapping("add")
+    public HttpResult add() {
+        testService.add();
+        return HttpResult.ok();
+    }
+}

+ 28 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/DbJoinDao.java

@@ -0,0 +1,28 @@
+package com.sckw.system.dao;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.system.model.SysArea;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-09 09:14:59
+ */
+@Mapper
+public interface DbJoinDao extends BaseMapper<SysArea> {
+    @DS("slave_1")
+    List<JSONObject> testSlave();
+
+    @DS("slave_1")
+    List<JSONObject> testMaster();
+    @DS("sharding")
+    List<JSONObject> testSharding();
+
+    @DS("sharding")
+    List<JSONObject> add();
+
+}

+ 16 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/TStudentMapper.java

@@ -0,0 +1,16 @@
+package com.sckw.system.dao;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.system.model.TStudent;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-14 17:43:36
+ */
+
+@Mapper
+@DS("sharding")
+public interface TStudentMapper extends BaseMapper<TStudent> {
+}

+ 1 - 5
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/SysArea.java

@@ -1,18 +1,14 @@
 package com.sckw.system.model;
 
-import com.sckw.core.model.base.BaseModel;
 import lombok.Data;
 
-import java.io.Serializable;
-import java.util.Date;
-
 /**
  * 行政区域
  * @author zk
  * @date 2023-05-31
  */
 @Data
-public class SysArea extends BaseModel {
+public class SysArea {
     /**
      * 地区ID
      */

+ 85 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/TStudent.java

@@ -0,0 +1,85 @@
+package com.sckw.system.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-14 17:43:36
+ */
+
+/**
+ * 学生表
+ */
+@Getter
+@Setter
+@ToString
+@TableName(value = "t_student")
+public class TStudent {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 姓名
+     */
+    @TableField(value = "`name`")
+    private String name;
+
+    /**
+     * 性别
+     */
+    @TableField(value = "sex")
+    private String sex;
+
+    /**
+     * 年龄
+     */
+    @TableField(value = "age")
+    private Integer age;
+
+    /**
+     * 身高
+     */
+    @TableField(value = "height")
+    private Double height;
+
+    /**
+     * 体重
+     */
+    @TableField(value = "weight")
+    private Double weight;
+
+    /**
+     * 学号
+     */
+    @TableField(value = "sno")
+    private String sno;
+
+    /**
+     * 年级
+     */
+    @TableField(value = "grade")
+    private String grade;
+
+    /**
+     * 班级
+     */
+    @TableField(value = "class_level")
+    private String classLevel;
+
+    /**
+     * 入学时间
+     */
+    @TableField(value = "`time`")
+    private LocalDateTime time;
+
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+}

+ 59 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/TestService.java

@@ -0,0 +1,59 @@
+package com.sckw.system.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.system.dao.DbJoinDao;
+import com.sckw.system.dao.TStudentMapper;
+import com.sckw.system.model.TStudent;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Author xucaiqin
+ * @date 2023-06-09 09:15:50
+ */
+@Service
+public class TestService {
+    @Resource
+    private DbJoinDao dbJoinDao;
+    @Resource
+    private TStudentMapper tStudentMapper;
+
+    public List<JSONObject> test() {
+        return dbJoinDao.testSlave();
+    }
+
+    public List<JSONObject> testMaster() {
+        return dbJoinDao.testMaster();
+    }
+
+    public List<JSONObject> testSharding() {
+        return dbJoinDao.testSharding();
+    }
+
+    public void add() {
+
+        TStudent tStudent = new TStudent();
+        tStudent.setName("");
+        tStudent.setSex("");
+        tStudent.setAge(0);
+        tStudent.setHeight(0.0D);
+        tStudent.setWeight(0.0D);
+        tStudent.setSno("");
+        tStudent.setGrade("");
+        tStudent.setClassLevel("asdf");
+        tStudent.setTime(LocalDateTime.now());
+        tStudent.setCreateTime(LocalDateTime.now());
+
+
+//        try {
+//            int insert = tStudentMapper.insert(tStudent);
+//        } catch (Exception e) {
+////            throw new RuntimeException(e);
+//        }
+        List<TStudent> tStudents = tStudentMapper.selectList(new LambdaQueryWrapper<>());
+    }
+}

+ 68 - 6
sckw-modules/sckw-system/src/main/resources/bootstrap-dev.yml

@@ -36,14 +36,14 @@ spring:
             spring:
               rabbitmq:
                 virtual-host: /
-                host: 10.10.10.230
+                host: 127.0.0.1
                 port: 5672
-                username: sckw
-                password: Yy123...
+                username: admin
+                password: admin
   rabbitmq:
-    username: sckw
-    password: Yy123...
-    host: 10.10.10.230
+    username: admin
+    password: admin
+    host: 127.0.0.1
     port: 5672
     virtual-host: /
   data:
@@ -124,6 +124,68 @@ seata:
 #  sentinel:
 #    enabled: true
 
+
+  sharding:
+    enable: true
+    database-name: test
+    #    单机模式
+    #    mode:
+    #      type: Standalone
+    #      repository:
+    #        type: JDBC
+    #    集群模式,nacos持久化
+    mode:
+      type: Cluster
+      repository:
+        type: Nacos
+        props:
+          server-lists: 127.0.0.1:8848
+          namespace: sckw-service-platform-dev
+    dataSources:
+      test0:
+        driverClassName: com.mysql.cj.jdbc.Driver
+        jdbcUrl: jdbc:mysql://www.cometoyou.cn:3306/test
+        username: root
+        password: xcqXCQ@123456
+      test1:
+        driverClassName: com.mysql.cj.jdbc.Driver
+        jdbcUrl: jdbc:mysql://www.cometoyou.cn:3306/test2
+        username: root
+        password: xcqXCQ@123456
+    props:
+      sql-show: true
+    rules:
+      - defaultDatabaseShardingStrategy:
+          standard:
+            shardingColumn: user_id
+            shardingAlgorithmName: database_inline
+        shardingAlgorithms:
+          database_inline:
+            type: INLINE
+            props:
+              algorithm-expression: ds_${user_id % 2}
+        keyGenerators:
+          snowflake:
+            type: SNOWFLAKE
+        auditors:
+          sharding_key_required_auditor:
+            type: DML_SHARDING_CONDITIONS
+  datasource:
+    dynamic:
+      druid:
+        initial-size: 5
+      primary: master
+      strict: false
+      datasource:
+        master:
+          url: jdbc:mysql://47.108.162.14:3306/sckw_system?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
+          username: root
+          password: Yy123...
+        slave_1:
+          url: jdbc:mysql://47.108.162.14:3306/wph_system?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
+          username: root
+          password: Yy123...
+
 # dubbo
 dubbo:
   application:

+ 21 - 0
sckw-modules/sckw-system/src/main/resources/mapper/DbJoinDao.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.system.dao.DbJoinDao">
+    <select id="testSlave" resultType="com.alibaba.fastjson.JSONObject">
+        select *
+        from t_user
+    </select>
+    <select id="testMaster" resultType="com.alibaba.fastjson.JSONObject">
+        select a.*
+        from sckw_system.kws_dept a
+    </select>
+    <select id="testSharding" resultType="com.alibaba.fastjson.JSONObject">
+        select *
+        from you_division
+    </select>
+    <insert id="add" >
+        INSERT INTO t_student (`name`, `sex`, `age`, `height`, `weight`, `sno`, `grade`, `class`, `time`, `create_time`)
+        VALUES ('高翰林', '男', 24, 154.47, 129.07, 'ST20220925000120', '七年级', '二班', '2022-03-03 23:56:38',
+                '2023-01-13 17:34:29');
+    </insert>
+</mapper>

+ 23 - 0
sckw-modules/sckw-system/src/main/resources/mapper/TStudentMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.system.dao.TStudentMapper">
+  <resultMap id="BaseResultMap" type="com.sckw.system.model.TStudent">
+    <!--@mbg.generated-->
+    <!--@Table t_student-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="sex" jdbcType="CHAR" property="sex" />
+    <result column="age" jdbcType="INTEGER" property="age" />
+    <result column="height" jdbcType="DOUBLE" property="height" />
+    <result column="weight" jdbcType="DOUBLE" property="weight" />
+    <result column="sno" jdbcType="VARCHAR" property="sno" />
+    <result column="grade" jdbcType="VARCHAR" property="grade" />
+    <result column="class" jdbcType="VARCHAR" property="class" />
+    <result column="time" jdbcType="TIMESTAMP" property="time" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, `name`, sex, age, height, weight, sno, grade, `class`, `time`, create_time
+  </sql>
+</mapper>