From e2c592fd4f303351e77fee643ef65d44691e28b8 Mon Sep 17 00:00:00 2001
From: JOETION <1322874562@qq.com>
Date: Wed, 20 Jan 2021 18:27:28 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 18 ++
README.md | 1 +
cooperop-base-cache/pom.xml | 32 +++
.../ExtGenericFastJsonRedisSerializer.java | 46 ++++
.../base/cache/redis/RedisConfig.java | 37 +++
.../base/cache/redis/RedisManager.java | 68 ++++++
cooperop-base-datasource/pom.xml | 66 ++++++
.../mysql/common/MultiDataSource.java | 18 ++
.../mysql/config/DruidProperties.java | 121 ++++++++++
.../mysql/config/DynamicDataSource.java | 52 +++++
.../mysql/config/MultiDataSourceAop.java | 76 +++++++
.../mysql/config/MultiDataSourceConfig.java | 33 +++
.../mysql/config/MultiSourceConfig.java | 89 ++++++++
cooperop-base-dictionary/pom.xml | 15 ++
cooperop-base-message/pom.xml | 33 +++
.../base/message/ExternalMessage.java | 28 +++
.../base/message/ExternalMessageImpl.java | 41 ++++
.../base/message/InternalMessage.java | 19 ++
.../base/message/InternalMessageImpl.java | 24 ++
.../message/email/service/EmailService.java | 36 +++
.../email/service/impl/EmailServiceImpl.java | 89 ++++++++
cooperop-base-schedule/pom.xml | 15 ++
cooperop-base-taglib/pom.xml | 15 ++
cooperop-base-workflow/pom.xml | 22 ++
.../snakerflow/SnakerEngineBaseService.java | 37 +++
.../snakerflow/SnakerEngineService.java | 104 +++++++++
.../snakerflow/SnakerEngineServiceImpl.java | 212 ++++++++++++++++++
.../snakerflow/config/BeanConfig.java | 96 ++++++++
pom.xml | 61 +++++
29 files changed, 1504 insertions(+)
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 cooperop-base-cache/pom.xml
create mode 100644 cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/ExtGenericFastJsonRedisSerializer.java
create mode 100644 cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisConfig.java
create mode 100644 cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisManager.java
create mode 100644 cooperop-base-datasource/pom.xml
create mode 100644 cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/common/MultiDataSource.java
create mode 100644 cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DruidProperties.java
create mode 100644 cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DynamicDataSource.java
create mode 100644 cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceAop.java
create mode 100644 cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceConfig.java
create mode 100644 cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiSourceConfig.java
create mode 100644 cooperop-base-dictionary/pom.xml
create mode 100644 cooperop-base-message/pom.xml
create mode 100644 cooperop-base-message/src/main/java/business/cooperop/base/message/ExternalMessage.java
create mode 100644 cooperop-base-message/src/main/java/business/cooperop/base/message/ExternalMessageImpl.java
create mode 100644 cooperop-base-message/src/main/java/business/cooperop/base/message/InternalMessage.java
create mode 100644 cooperop-base-message/src/main/java/business/cooperop/base/message/InternalMessageImpl.java
create mode 100644 cooperop-base-message/src/main/java/business/cooperop/base/message/email/service/EmailService.java
create mode 100644 cooperop-base-message/src/main/java/business/cooperop/base/message/email/service/impl/EmailServiceImpl.java
create mode 100644 cooperop-base-schedule/pom.xml
create mode 100644 cooperop-base-taglib/pom.xml
create mode 100644 cooperop-base-workflow/pom.xml
create mode 100644 cooperop-base-workflow/src/main/java/business/cooperop/base/workflow/snakerflow/SnakerEngineBaseService.java
create mode 100644 cooperop-base-workflow/src/main/java/business/cooperop/base/workflow/snakerflow/SnakerEngineService.java
create mode 100644 cooperop-base-workflow/src/main/java/business/cooperop/base/workflow/snakerflow/SnakerEngineServiceImpl.java
create mode 100644 cooperop-base-workflow/src/main/java/business/cooperop/base/workflow/snakerflow/config/BeanConfig.java
create mode 100644 pom.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f8a4036
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,18 @@
+target/
+**/target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+*.iml
+.idea
+modules/log
+modules/logs
+.project
+.settings
+.classpath
+logs
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3d40ee9
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+协同办公框架端
\ No newline at end of file
diff --git a/cooperop-base-cache/pom.xml b/cooperop-base-cache/pom.xml
new file mode 100644
index 0000000..8e4d5fe
--- /dev/null
+++ b/cooperop-base-cache/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+
+ business.chaoran
+ cooperop-demo-base
+ 1.0-SNAPSHOT
+
+
+ business.chaoran
+ cooperop-base-cache
+ 1.0-SNAPSHOT
+
+
+
+
+
+ com.alibaba
+ fastjson
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+
diff --git a/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/ExtGenericFastJsonRedisSerializer.java b/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/ExtGenericFastJsonRedisSerializer.java
new file mode 100644
index 0000000..3bb8c51
--- /dev/null
+++ b/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/ExtGenericFastJsonRedisSerializer.java
@@ -0,0 +1,46 @@
+package business.cooperop.base.cache.redis;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+
+/*
+ **********************************************
+ * DATE PERSON REASON
+ * 2020-09-27 FXY Created
+ **********************************************
+ */
+
+/**
+ * Fastjson集成 spring-data-redis 扩展
+ *
+ * @author FXY
+ *
+ * 2018年1月23日
+ */
+
+public class ExtGenericFastJsonRedisSerializer extends GenericFastJsonRedisSerializer {
+
+ private static int NO_SkipTransientFieldFEATURE;
+
+ {
+ int features = SerializerFeature.config(JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.SkipTransientField, false);
+ NO_SkipTransientFieldFEATURE = SerializerFeature.config(features, SerializerFeature.WriteClassName, true);
+ }
+
+ @Override
+ public byte[] serialize(Object object) throws SerializationException {
+
+ if (object == null) {
+ return new byte[0];
+ }
+ try {
+ return JSON.toJSONBytes(object, NO_SkipTransientFieldFEATURE);
+ } catch (Exception ex) {
+ throw new SerializationException("Could not serialize: " + ex.getMessage(), ex);
+ }
+
+ }
+
+}
diff --git a/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisConfig.java b/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisConfig.java
new file mode 100644
index 0000000..a0d9450
--- /dev/null
+++ b/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisConfig.java
@@ -0,0 +1,37 @@
+package business.cooperop.base.cache.redis;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+ @Bean
+ public RedisManager redisManager(RedisTemplate redisTemplate) {
+ RedisManager redisManager = new RedisManager();
+ redisManager.setRedisTemplate(redisTemplate);
+ return redisManager;
+ }
+
+ @ConditionalOnMissingBean(RedisTemplate.class)
+ @Bean("redisTemplate")
+ public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
+
+ RedisTemplate redisTemplate = new RedisTemplate();
+ redisTemplate.setConnectionFactory(factory);
+
+ StringRedisSerializer ss = new StringRedisSerializer();
+
+ //默认使用JdkSerializationRedisSerializer对value进行序列化
+ //如果想要保证redis中数据的可读性,可以自定义序列化方式
+ ExtGenericFastJsonRedisSerializer redisSerializer = new ExtGenericFastJsonRedisSerializer();
+ redisTemplate.setKeySerializer(ss);
+ redisTemplate.setValueSerializer(redisSerializer);
+ redisTemplate.setHashKeySerializer(ss);
+ redisTemplate.setHashValueSerializer(redisSerializer);
+ return redisTemplate;
+ }
+}
diff --git a/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisManager.java b/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisManager.java
new file mode 100644
index 0000000..4d1f6ee
--- /dev/null
+++ b/cooperop-base-cache/src/main/java/business/cooperop/base/cache/redis/RedisManager.java
@@ -0,0 +1,68 @@
+package business.cooperop.base.cache.redis;
+
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * RedisManager
+ *
+ * @author FXY
+ *
+ * 2018年1月23日
+ */
+public class RedisManager {
+
+ /**
+ * 默认过期时长,单位:秒
+ */
+ public final static long DEFAULT_EXPIRE = 60 * 30 * 1;
+ /**
+ * 不设置过期时长
+ */
+ public final static long NOT_EXPIRE = -1;
+
+ private RedisTemplate redisTemplate;
+
+
+ public void set(String key, Object value, long expire) {
+ try {
+ if (expire == NOT_EXPIRE) {
+ redisTemplate.opsForValue().set(key, value);
+ } else {
+ redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public void set(String key, Object value) {
+ set(key, value, DEFAULT_EXPIRE);
+ }
+
+ public T get(String key, Class clazz) {
+ ValueOperations operations = redisTemplate.opsForValue();
+ return operations.get(key);
+
+ }
+
+ public Object get(String key) {
+ return redisTemplate.opsForValue().get(key);
+ }
+
+ public void delete(String key) {
+ redisTemplate.delete(key);
+ }
+
+ public RedisTemplate getRedisTemplate() {
+ return redisTemplate;
+ }
+
+ public void setRedisTemplate(RedisTemplate redisTemplate) {
+ this.redisTemplate = redisTemplate;
+ }
+
+}
diff --git a/cooperop-base-datasource/pom.xml b/cooperop-base-datasource/pom.xml
new file mode 100644
index 0000000..b5ac697
--- /dev/null
+++ b/cooperop-base-datasource/pom.xml
@@ -0,0 +1,66 @@
+
+
+
+ cooperop-demo-base
+ business.chaoran
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+
+ 3.4.0
+ 3.4.0
+ 1.18.12
+ 1.1.10
+ 2.2.7.RELEASE
+
+
+ cooperop-base-datasource
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+ ${spring-boot.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+ ${spring-boot.version}
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatisplus-spring-boot-starter.version}
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ ${mybatisplus.version}
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ com.alibaba
+ druid
+ ${druid.version}
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ ${spring-boot.version}
+
+
+
\ No newline at end of file
diff --git a/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/common/MultiDataSource.java b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/common/MultiDataSource.java
new file mode 100644
index 0000000..18b264e
--- /dev/null
+++ b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/common/MultiDataSource.java
@@ -0,0 +1,18 @@
+package business.cooperop.base.datasource.mysql.common;
+
+/*
+ **********************************************
+ * DATE PERSON REASON
+ * 2020/7/24 FXY Created
+ **********************************************
+ */
+
+
+import java.lang.annotation.*;
+
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+public @interface MultiDataSource {
+ String name() default "main";
+}
\ No newline at end of file
diff --git a/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DruidProperties.java b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DruidProperties.java
new file mode 100644
index 0000000..7ae48a4
--- /dev/null
+++ b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DruidProperties.java
@@ -0,0 +1,121 @@
+package business.cooperop.base.datasource.mysql.config;
+
+/*
+ **********************************************
+ * DATE PERSON REASON
+ * 2020/7/24 FXY Created
+ **********************************************
+ */
+
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.util.JdbcConstants;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.sql.SQLException;
+
+@Component
+@ConfigurationProperties(prefix = "spring.datasource")
+@Setter
+@Getter
+@Slf4j
+public class DruidProperties {
+ public DruidProperties() {
+ log.info("default 数据源加载");
+ }
+
+ /**
+ * 数据源名称
+ */
+ private String datasourceName = "main";
+
+ private String url;
+
+ private String username;
+
+ private String password;
+ /**
+ * 默认为 MYSQL 8.x 配置
+ */
+ private String driverClassName;
+
+ private Integer initialSize = 10;
+
+ private Integer minIdle = 3;
+
+ private Integer maxActive = 60;
+
+ private Integer maxWait = 60000;
+
+ private Boolean removeAbandoned = true;
+
+ private Integer removeAbandonedTimeout = 180;
+
+ private Integer timeBetweenEvictionRunsMillis = 60000;
+
+ private Integer minEvictableIdleTimeMillis = 300000;
+
+ private String validationQuery = "SELECT 'x'";
+
+ private Boolean testWhileIdle = true;
+
+ private Boolean testOnBorrow = false;
+
+ private Boolean testOnReturn = false;
+
+ private Boolean poolPreparedStatements = true;
+
+ private Integer maxPoolPreparedStatementPerConnectionSize = 50;
+
+ private String filters = "stat";
+
+ public DruidDataSource config() {
+ DruidDataSource dataSource = new DruidDataSource();
+ return config(dataSource);
+ }
+
+ public DruidDataSource config(DruidDataSource dataSource) {
+ dataSource.setDbType(JdbcConstants.SQL_SERVER);
+ dataSource.setUrl(url);
+ dataSource.setUsername(username);
+ dataSource.setPassword(password);
+ dataSource.setDriverClassName(driverClassName);
+ dataSource.setInitialSize(initialSize); // 定义初始连接数
+ dataSource.setMinIdle(minIdle); // 最小空闲
+ dataSource.setMaxActive(maxActive); // 定义最大连接数
+ dataSource.setMaxWait(maxWait); // 获取连接等待超时的时间
+ dataSource.setRemoveAbandoned(removeAbandoned); // 超过时间限制是否回收
+ dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout); // 超过时间限制多长
+
+ // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+ // 配置一个连接在池中最小生存的时间,单位是毫秒
+ dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+ // 用来检测连接是否有效的sql,要求是一个查询语句
+ dataSource.setValidationQuery(validationQuery);
+ // 申请连接的时候检测
+ dataSource.setTestWhileIdle(testWhileIdle);
+ // 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能
+ dataSource.setTestOnBorrow(testOnBorrow);
+ // 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能
+ dataSource.setTestOnReturn(testOnReturn);
+ // 打开PSCache,并且指定每个连接上PSCache的大小
+ dataSource.setPoolPreparedStatements(poolPreparedStatements);
+ dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
+ // 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
+ // 监控统计用的filter:stat
+ // 日志用的filter:log4j
+ // 防御SQL注入的filter:wall
+ try {
+ dataSource.setFilters(filters);
+ } catch (SQLException e) {
+ log.error("扩展插件失败.{}", e.getMessage());
+ }
+ return dataSource;
+ }
+
+}
diff --git a/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DynamicDataSource.java b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DynamicDataSource.java
new file mode 100644
index 0000000..881ad3a
--- /dev/null
+++ b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/DynamicDataSource.java
@@ -0,0 +1,52 @@
+package business.cooperop.base.datasource.mysql.config;
+
+/*
+ **********************************************
+ * DATE PERSON REASON
+ * 2020/7/24 FXY Created
+ **********************************************
+ */
+
+
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+public class DynamicDataSource extends AbstractRoutingDataSource {
+ /**
+ * 多 datasource 的上下文
+ * 每个线程独立的数据库连接名称
+ */
+ private static final ThreadLocal contextHolder = new ThreadLocal();
+
+ /**
+ * @param dataSourceDbName 数据库别名
+ * @Description: 设置数据源别名
+ */
+ public static void setDataSourceDbName(String dataSourceDbName) {
+ contextHolder.set(dataSourceDbName);
+ }
+
+ /**
+ * @Description: 获取数据源别名
+ */
+ public static String getDataSourceDbName() {
+ return contextHolder.get();
+ }
+
+ /**
+ * @Description: 清除数据源别名
+ */
+ public static void clearDataSourceDbName() {
+ contextHolder.remove();
+ }
+
+ /**
+ * 重写获取连接名称的方法
+ *
+ * @return 连接名称
+ */
+ @Override
+ protected Object determineCurrentLookupKey() {
+ return getDataSourceDbName();
+ }
+
+}
\ No newline at end of file
diff --git a/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceAop.java b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceAop.java
new file mode 100644
index 0000000..5b92120
--- /dev/null
+++ b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceAop.java
@@ -0,0 +1,76 @@
+package business.cooperop.base.datasource.mysql.config;
+
+/*
+ **********************************************
+ * DATE PERSON REASON
+ * 2020/7/24 FXY Created
+ **********************************************
+ */
+
+
+import business.cooperop.base.datasource.mysql.common.MultiDataSource;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.core.Ordered;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+
+@Aspect
+@Component
+@ConditionalOnProperty(prefix = "business.cooperop.base", name = "multiDatasourceOpen", havingValue = "true")
+@Slf4j
+public class MultiDataSourceAop implements Ordered {
+
+
+ public MultiDataSourceAop() {
+ log.info("多数据源初始化 AOP ");
+ }
+
+ @Pointcut(value = "@annotation(business.cooperop.base.datasource.mysql.common.MultiDataSource)")
+ private void cut() {
+ }
+
+ @Around("cut()")
+ public Object around(ProceedingJoinPoint point) throws Throwable {
+
+ Signature signature = point.getSignature();
+ MethodSignature methodSignature;
+ if (!(signature instanceof MethodSignature)) {
+ throw new IllegalArgumentException("该注解只能用于方法");
+ }
+ methodSignature = (MethodSignature) signature;
+ //获取当前方法的注解
+ Object target = point.getTarget();
+ Method currentMethod = target.getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());
+ MultiDataSource datasource = currentMethod.getAnnotation(MultiDataSource.class);
+ if (datasource != null) {
+ DynamicDataSource.setDataSourceDbName(datasource.name());
+ log.info("设置数据源为:" + datasource.name());
+ } else {
+ DynamicDataSource.setDataSourceDbName("main");
+ log.info("设置数据源为:默认 --> main");
+ }
+ try {
+ return point.proceed();
+ } finally {
+ log.info("清空数据源信息!");
+ DynamicDataSource.clearDataSourceDbName();
+ }
+ }
+
+ /**
+ * aop的顺序要早于spring的事务
+ */
+ @Override
+ public int getOrder() {
+ return 1;
+ }
+}
\ No newline at end of file
diff --git a/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceConfig.java b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceConfig.java
new file mode 100644
index 0000000..e98bfd2
--- /dev/null
+++ b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiDataSourceConfig.java
@@ -0,0 +1,33 @@
+package business.cooperop.base.datasource.mysql.config;
+
+/*
+ **********************************************
+ * DATE PERSON REASON
+ * 2020/7/24 FXY Created
+ **********************************************
+ */
+
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@ConfigurationProperties(prefix = "business.cooperop.base")
+@Getter
+@Setter
+@Slf4j
+public class MultiDataSourceConfig {
+ public MultiDataSourceConfig() {
+ log.info("加载多数据源配置信息 --> {}", "business.cooperop.base");
+ }
+
+ /**
+ * 多个数据源
+ */
+ private List datasource;
+}
diff --git a/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiSourceConfig.java b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiSourceConfig.java
new file mode 100644
index 0000000..da547a4
--- /dev/null
+++ b/cooperop-base-datasource/src/main/java/business/cooperop/base/datasource/mysql/config/MultiSourceConfig.java
@@ -0,0 +1,89 @@
+package business.cooperop.base.datasource.mysql.config;
+
+/*
+ **********************************************
+ * DATE PERSON REASON
+ * 2020/7/24 FXY Created
+ **********************************************
+ */
+
+
+import com.alibaba.druid.pool.DruidDataSource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Configuration
+public class MultiSourceConfig {
+
+ @Autowired
+ private DruidProperties druidProperties;
+
+ @Autowired
+ private MultiDataSourceConfig multiDataSourceConfig;
+
+
+ /**
+ * 单数据源连接池配置
+ */
+ @Bean
+ @ConditionalOnProperty(name = "business.cooperop.base.multiDatasourceOpen", havingValue = "false")
+ public DruidDataSource singleDatasource() {
+ log.info("singleDatasource");
+ return druidProperties.config(new DruidDataSource());
+ }
+
+ /**
+ * 多数据源连接池配置
+ */
+ @Bean
+ @ConditionalOnProperty(name = "business.cooperop.base.multiDatasourceOpen", havingValue = "true")
+ public DynamicDataSource mutiDataSource() {
+ log.info("mutiDataSource");
+
+ //存储数据源别名与数据源的映射
+ HashMap