diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/pom.xml b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/pom.xml
index 2e574380b..ef7e47e78 100644
--- a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/pom.xml
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/pom.xml
@@ -12,9 +12,17 @@
jeecg-cloud-test-shardingsphere
+
- org.jeecgframework.boot
- jeecg-boot-starter-shardingsphere
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ ${dynamic-datasource-spring-boot-starter.version}
+
+
+
+ org.apache.shardingsphere
+ shardingsphere-jdbc-core-spring-boot-starter
+ 5.0.0
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/config/DataSourceConfiguration.java b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/config/DataSourceConfiguration.java
new file mode 100644
index 000000000..3b579e271
--- /dev/null
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/config/DataSourceConfiguration.java
@@ -0,0 +1,85 @@
+package org.jeecg.modules.test.sharding.config;
+
+import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
+import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
+import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
+import com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider;
+import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.context.annotation.Primary;
+
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+import java.util.Map;
+
+/**
+ * 分库分表数据源配置
+ * @author zyf
+ */
+@Configuration
+@AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class, SpringBootConfiguration.class})
+public class DataSourceConfiguration {
+ /**
+ * 分表数据源名称
+ */
+ public static final String SHARDING_DATA_SOURCE_NAME = "sharding";
+ /**
+ * 动态数据源配置项
+ */
+ @Resource
+ private DynamicDataSourceProperties dynamicDataSourceProperties;
+
+ @Lazy
+ @Resource
+ DataSource shardingDataSource;
+
+ @Lazy
+ @Resource
+ DefaultDataSourceCreator dataSourceCreator;
+
+
+ /**
+ * 将shardingDataSource放到了多数据源(dataSourceMap)中
+ * 注意有个版本的bug,3.1.1版本 不会进入loadDataSources 方法,这样就一直造成数据源注册失败
+ */
+ @Bean
+ public DynamicDataSourceProvider dynamicDataSourceProvider() {
+ Map datasourceMap = dynamicDataSourceProperties.getDatasource();
+ return new AbstractDataSourceProvider(dataSourceCreator) {
+ @Override
+ public Map loadDataSources() {
+ Map dataSourceMap = createDataSourceMap(datasourceMap);
+ // 将 shardingjdbc 管理的数据源也交给动态数据源管理
+ dataSourceMap.put(SHARDING_DATA_SOURCE_NAME, shardingDataSource);
+ return dataSourceMap;
+ }
+ };
+ }
+
+ /**
+ * 将动态数据源设置为首选的
+ * 当spring存在多个数据源时, 自动注入的是首选的对象
+ * 设置为主要的数据源之后,就可以支持shardingjdbc原生的配置方式了
+ *
+ * @return
+ */
+ @Primary
+ @Bean
+ public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
+ DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
+ dataSource.setPrimary(dynamicDataSourceProperties.getPrimary());
+ dataSource.setStrict(dynamicDataSourceProperties.getStrict());
+ dataSource.setStrategy(dynamicDataSourceProperties.getStrategy());
+ //v3.5.2 稳定版本 (让默认的DynamicDataSourceProvider优先级为0 by@VonXXGhostin#437)
+ //dataSource.setProvider(dynamicDataSourceProvider);
+ dataSource.setP6spy(dynamicDataSourceProperties.getP6spy());
+ dataSource.setSeata(dynamicDataSourceProperties.getSeata());
+ return dataSource;
+ }
+}