From 1f408ba6d332e5c266a7d75181b1b6d6cd554532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=BD=E7=92=8B?= <2833784085@qq.com@user.noreply.gitee.com> Date: Sun, 30 Jun 2024 18:42:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E6=88=90proovy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 5 +- .idea/modules.xml | 8 + .idea/workspace.xml | 153 ++++++++++-------- etl-auth-common.iml | 8 + etl-auth/etl-auth-server/pom.xml | 12 +- .../com/auth/server/config/MvcConfig.java | 18 --- .../java/com/auth/server/util/UserRealm.java | 8 +- .../src/main/resources/bootstrap.yml | 10 +- .../target/classes/bootstrap.yml | 10 +- .../com/auth/server/util/UserRealm.class | Bin 3559 -> 3559 bytes .../source/common/pojo/req/DataRinse.java | 39 +++++ .../source/common/pojo/req/DataRinse.class | Bin 0 -> 5834 bytes .../el-data-source-common-1.0-SNAPSHOT.jar | Bin 0 -> 37865 bytes .../target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 22 +++ .../compile/default-compile/inputFiles.lst | 22 +++ etl-data-source/el-data-source-server/pom.xml | 37 ++++- .../data/source/server/aop/LimitAspect.java | 4 +- .../etl/data/source/server}/config/Limit.java | 2 +- .../source/server/config/RedisConfig.java | 4 - .../server/controller/DatabaseController.java | 13 +- .../server/mapper/DataSourceBaseMapper.java | 5 + .../server/service/DatabaseService.java | 3 +- .../service/impl/DatabaseServiceImpl.java | 129 +++++++++++++-- .../mappers/DataSourceBaseMapper.xml | 7 + .../data/source/server/aop/LimitAspect.class | Bin 3238 -> 3238 bytes .../data/source/server}/config/Limit.class | Bin 732 -> 732 bytes .../source/server/config/RedisConfig.class | Bin 1468 -> 1468 bytes .../controller/DatabaseController.class | Bin 4742 -> 4941 bytes .../server/service/DatabaseService.class | Bin 1032 -> 1099 bytes .../service/impl/DatabaseServiceImpl.class | Bin 14229 -> 19104 bytes .../classes/mappers/DataSourceBaseMapper.xml | 7 + .../el-data-source-server-1.0-SNAPSHOT.jar | Bin 3690 -> 0 bytes .../target/maven-archiver/pom.properties | 5 - .../compile/default-compile/createdFiles.lst | 1 - .../compile/default-compile/inputFiles.lst | 27 ++++ .../default-testCompile/createdFiles.lst | 1 - .../default-testCompile/inputFiles.lst | 1 - ...aSourceServerApplicationTests$Person.class | Bin 1055 -> 0 bytes .../ElDataSourceServerApplicationTests.class | Bin 2213 -> 0 bytes etl-gateway/pom.xml | 21 ++- etl-gateway/src/main/resources/bootstrap.yml | 8 +- etl-groovy/pom.xml | 9 ++ .../groovy/SpringBootGroovyApplication.java | 11 +- .../main/java/com/etl/groovy/config/ACmp.java | 14 ++ .../main/java/com/etl/groovy/config/BCmp.java | 14 ++ .../main/java/com/etl/groovy/config/CCmp.java | 14 ++ .../controller/GroovyTestController.java | 48 ++++++ .../controller/GrooyTestController.java | 43 ----- etl-groovy/src/main/resources/bootstrap.yml | 58 +++++++ .../src/main/resources/config/flow.el.xml | 6 + etl-groovy/target/classes/bootstrap.yml | 58 +++++++ .../groovy/SpringBootGroovyApplication.class | Bin 1632 -> 880 bytes .../classes/com/etl/groovy/config/ACmp.class | Bin 0 -> 635 bytes .../classes/com/etl/groovy/config/BCmp.class | Bin 0 -> 635 bytes .../classes/com/etl/groovy/config/CCmp.class | Bin 0 -> 635 bytes .../controller/GroovyTestController.class | Bin 0 -> 1582 bytes etl-groovy/target/classes/config/flow.el.xml | 6 + 58 files changed, 674 insertions(+), 202 deletions(-) create mode 100644 .idea/modules.xml create mode 100644 etl-auth-common.iml delete mode 100644 etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java create mode 100644 etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/req/DataRinse.java create mode 100644 etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/req/DataRinse.class create mode 100644 etl-data-source/el-data-source-common/target/el-data-source-common-1.0-SNAPSHOT.jar create mode 100644 etl-data-source/el-data-source-common/target/maven-archiver/pom.properties create mode 100644 etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst rename etl-data-source/{el-data-source-common/src/main/java/com/etl/data/source/common => el-data-source-server/src/main/java/com/etl/data/source/server}/config/Limit.java (91%) create mode 100644 etl-data-source/el-data-source-server/src/main/resources/mappers/DataSourceBaseMapper.xml rename etl-data-source/{el-data-source-common/target/classes/com/etl/data/source/common => el-data-source-server/target/classes/com/etl/data/source/server}/config/Limit.class (88%) create mode 100644 etl-data-source/el-data-source-server/target/classes/mappers/DataSourceBaseMapper.xml delete mode 100644 etl-data-source/el-data-source-server/target/el-data-source-server-1.0-SNAPSHOT.jar delete mode 100644 etl-data-source/el-data-source-server/target/maven-archiver/pom.properties delete mode 100644 etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst delete mode 100644 etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst delete mode 100644 etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests$Person.class delete mode 100644 etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests.class create mode 100644 etl-groovy/src/main/java/com/etl/groovy/config/ACmp.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/config/BCmp.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/config/CCmp.java create mode 100644 etl-groovy/src/main/java/com/etl/groovy/controller/GroovyTestController.java delete mode 100644 etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java create mode 100644 etl-groovy/src/main/resources/config/flow.el.xml create mode 100644 etl-groovy/target/classes/com/etl/groovy/config/ACmp.class create mode 100644 etl-groovy/target/classes/com/etl/groovy/config/BCmp.class create mode 100644 etl-groovy/target/classes/com/etl/groovy/config/CCmp.class create mode 100644 etl-groovy/target/classes/com/etl/groovy/controller/GroovyTestController.class create mode 100644 etl-groovy/target/classes/config/flow.el.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 7750dd9..07cd168 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - @@ -21,7 +20,9 @@ - + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c3df1e5 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9a4d57b..69e2e7f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,70 +4,65 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + - + - + + - + + + + + + + + - - - - + + + + + + + + - - @@ -188,7 +184,7 @@ - + + + + + + + + - - - + + + @@ -288,6 +291,14 @@ + + + + + + + + - @@ -355,11 +374,13 @@ + diff --git a/etl-auth-common.iml b/etl-auth-common.iml new file mode 100644 index 0000000..061c0bf --- /dev/null +++ b/etl-auth-common.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/etl-auth/etl-auth-server/pom.xml b/etl-auth/etl-auth-server/pom.xml index 9a080dc..93d8b00 100644 --- a/etl-auth/etl-auth-server/pom.xml +++ b/etl-auth/etl-auth-server/pom.xml @@ -32,9 +32,9 @@ 1.4.0 - io.springfox - springfox-swagger2 - 3.0.0 + com.github.xiaoymin + knife4j-openapi2-spring-boot-starter + 4.4.0 com.bwie @@ -56,11 +56,7 @@ com.mysql mysql-connector-j - - com.github.xiaoymin - knife4j-spring-boot-starter - 3.0.3 - + com.baomidou mybatis-plus-boot-starter diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java deleted file mode 100644 index d9d7556..0000000 --- a/etl-auth/etl-auth-server/src/main/java/com/auth/server/config/MvcConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -//package com.auth.server.config; -//import com.auth.server.interceptor.UserInterceptor; -//import com.auth.server.mapper.UserMangeMapper; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -//@Configuration -//public class MvcConfig implements WebMvcConfigurer { -// @Autowired -// private UserMangeMapper userMangeMapper; -// @Override -// public void addInterceptors(InterceptorRegistry registry) { -// //添加拦截器,排除/路径和 /login路径 -// registry.addInterceptor(new UserInterceptor(userMangeMapper)) -// .excludePathPatterns("/","/user/login"); -// } -//} diff --git a/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java b/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java index b9218f5..277ba35 100644 --- a/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java +++ b/etl-auth/etl-auth-server/src/main/java/com/auth/server/util/UserRealm.java @@ -19,15 +19,13 @@ import org.springframework.beans.factory.annotation.Autowired; public class UserRealm extends AuthorizingRealm { @Autowired private UserManageService userManageService; - //授权 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { - /**配置权限 *此处User实体需配置属性roles,用户权限 *获取当前用户对象 - * */ + */ SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); Subject subject= SecurityUtils.getSubject(); UserAccount currentUser =(UserAccount) subject.getPrincipal(); @@ -35,7 +33,6 @@ public class UserRealm extends AuthorizingRealm { log.info("用户权限为:"+currentUser.getRoles()); return authorizationInfo; } - //认证 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { @@ -56,9 +53,8 @@ public class UserRealm extends AuthorizingRealm { }else { log.info(user.getUsername()); } - //principal:认证的实体信息,可以是username,也可以是数据库表对应的用户的实体对象 - // Object principal = user.getUsername(); + // Object principal = user.getUsername(); ByteSource salt = ByteSource.Util.bytes(username); return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword() , salt,getName()); } diff --git a/etl-auth/etl-auth-server/src/main/resources/bootstrap.yml b/etl-auth/etl-auth-server/src/main/resources/bootstrap.yml index 4edeee2..26228d3 100644 --- a/etl-auth/etl-auth-server/src/main/resources/bootstrap.yml +++ b/etl-auth/etl-auth-server/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ spring: application: name: engine-auth redis: - host: 115.159.33.152 + host: 127.0.0.1 port: 6379 datasource: driver-class-name: com.mysql.cj.jdbc.Driver @@ -20,12 +20,12 @@ spring: nacos: #注册服务 discovery: - server-addr: 115.159.33.152:8848 - namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + server-addr: 182.254.221.163:8848 + namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 # 配置 config: - server-addr: 115.159.33.152:8848 - namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + server-addr: 182.254.221.163:8848 + namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/etl-auth/etl-auth-server/target/classes/bootstrap.yml b/etl-auth/etl-auth-server/target/classes/bootstrap.yml index 4edeee2..26228d3 100644 --- a/etl-auth/etl-auth-server/target/classes/bootstrap.yml +++ b/etl-auth/etl-auth-server/target/classes/bootstrap.yml @@ -4,7 +4,7 @@ spring: application: name: engine-auth redis: - host: 115.159.33.152 + host: 127.0.0.1 port: 6379 datasource: driver-class-name: com.mysql.cj.jdbc.Driver @@ -20,12 +20,12 @@ spring: nacos: #注册服务 discovery: - server-addr: 115.159.33.152:8848 - namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + server-addr: 182.254.221.163:8848 + namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 # 配置 config: - server-addr: 115.159.33.152:8848 - namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + server-addr: 182.254.221.163:8848 + namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/etl-auth/etl-auth-server/target/classes/com/auth/server/util/UserRealm.class b/etl-auth/etl-auth-server/target/classes/com/auth/server/util/UserRealm.class index 4d29926afaec96dfd6f6ef5c50da5759da63487e..81e2988a5b7b15ae30c6b3f1cb4b55bb0467ae26 100644 GIT binary patch delta 75 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 literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-common/target/el-data-source-common-1.0-SNAPSHOT.jar b/etl-data-source/el-data-source-common/target/el-data-source-common-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..a8d0b7164e73b0e989330f538a0830efb3a67ee0 GIT binary patch literal 37865 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 literal 0 HcmV?d00001 diff --git a/etl-data-source/el-data-source-common/target/maven-archiver/pom.properties b/etl-data-source/el-data-source-common/target/maven-archiver/pom.properties new file mode 100644 index 0000000..3dde746 --- /dev/null +++ b/etl-data-source/el-data-source-common/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Fri Jun 28 17:15:30 CST 2024 +version=1.0-SNAPSHOT +groupId=com.bwie +artifactId=el-data-source-common diff --git a/etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..0108733 --- /dev/null +++ b/etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,22 @@ +com\etl\data\source\common\pojo\DataSourceType.class +com\etl\data\source\common\pojo\DatabaseRedis.class +com\etl\data\source\common\pojo\resq\ColumnInfo.class +com\etl\data\source\common\pojo\req\RuleReq.class +com\etl\data\source\common\pojo\req\DataSourceReq.class +com\etl\data\source\common\pojo\req\ConnectMysqlReq.class +com\etl\data\source\common\pojo\req\DataRinse.class +com\etl\data\source\common\pojo\Task.class +com\etl\data\source\common\pojo\CodeType.class +com\etl\data\source\common\pojo\constants\MysqlConstants.class +com\etl\data\source\common\ennum\LimitType.class +com\etl\data\source\common\pojo\constants\Constants.class +com\etl\data\source\common\pojo\DatabaseConfig.class +com\etl\data\source\common\pojo\Rule.class +com\etl\data\source\common\pojo\RuleType.class +com\etl\data\source\common\pojo\Code.class +com\etl\data\source\common\pojo\DataSource.class +com\etl\data\source\common\pojo\BaseEntity.class +com\etl\data\source\common\pojo\Person.class +com\etl\data\source\common\pojo\req\DataSourceColumn.class +com\etl\data\source\common\pojo\TaskManagerEntity.class +com\etl\data\source\common\pojo\until\R.class diff --git a/etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..e686b90 --- /dev/null +++ b/etl-data-source/el-data-source-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,22 @@ +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\Person.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\DatabaseRedis.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\TaskManagerEntity.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\Code.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\DataSource.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\Rule.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\req\DataSourceReq.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\req\DataRinse.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\req\DataSourceColumn.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\RuleType.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\req\ConnectMysqlReq.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\Task.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\constants\MysqlConstants.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\DataSourceType.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\ennum\LimitType.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\DatabaseConfig.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\constants\Constants.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\CodeType.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\BaseEntity.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\resq\ColumnInfo.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\req\RuleReq.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-common\src\main\java\com\etl\data\source\common\pojo\until\R.java diff --git a/etl-data-source/el-data-source-server/pom.xml b/etl-data-source/el-data-source-server/pom.xml index 961670b..3209f4a 100644 --- a/etl-data-source/el-data-source-server/pom.xml +++ b/etl-data-source/el-data-source-server/pom.xml @@ -16,6 +16,30 @@ 2.6.13 + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.redisson + redisson-spring-boot-starter + 3.21.1 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-data-redis + + + com.baomidou mybatis-plus-boot-starter @@ -55,7 +79,18 @@ com.google.guava guava - 30.1-jre + 31.1-jre + + + com.OpenAI.guava + guava + + + + + com.belerweb + pinyin4j + 2.5.1 org.springframework.boot diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/LimitAspect.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/LimitAspect.java index c0d6572..126a092 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/LimitAspect.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/LimitAspect.java @@ -1,7 +1,7 @@ package com.etl.data.source.server.aop; import com.etl.common.exception.LimitException; -import com.etl.data.source.common.config.Limit; +import com.etl.data.source.server.config.Limit; import com.google.common.collect.Maps; import com.google.common.util.concurrent.RateLimiter; import lombok.extern.slf4j.Slf4j; @@ -20,7 +20,7 @@ public class LimitAspect { private final Map limitMap = Maps.newConcurrentMap(); - @Around("@annotation(com.etl.data.source.common.config.Limit)") + @Around("@annotation(com.etl.data.source.server.config.Limit)") public Object around(ProceedingJoinPoint pjp) throws Throwable { MethodSignature signature = (MethodSignature)pjp.getSignature(); Method method = signature.getMethod(); diff --git a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/Limit.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/Limit.java similarity index 91% rename from etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/Limit.java rename to etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/Limit.java index bb4d2ea..53402bb 100644 --- a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/Limit.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/Limit.java @@ -1,4 +1,4 @@ -package com.etl.data.source.common.config; +package com.etl.data.source.server.config; import java.lang.annotation.*; import java.util.concurrent.TimeUnit; diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java index 4c9e78e..ac0df28 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java @@ -1,11 +1,7 @@ package com.etl.data.source.server.config; import com.etl.data.source.common.pojo.DatabaseRedis; -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 redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @Configuration diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java index 4672c1a..39dbfa4 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java @@ -1,17 +1,16 @@ package com.etl.data.source.server.controller; import com.etl.common.result.Result; -import com.etl.data.source.common.config.Limit; +import com.etl.data.source.server.config.Limit; import com.etl.data.source.common.pojo.DatabaseConfig; import com.etl.data.source.common.pojo.DatabaseRedis; +import com.etl.data.source.common.pojo.req.DataRinse; import com.etl.data.source.common.pojo.resq.ColumnInfo; -import com.etl.data.source.common.pojo.until.R; import com.etl.data.source.server.service.DatabaseService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -29,9 +28,9 @@ public class DatabaseController { @PostMapping("/testDatabaseRedis") @ApiOperation(value = "测试redis连接") @Limit(key = "testDatabaseRedis", permitsPerSecond = 1, timeout = 500, msg = "当前排队人数较多,请稍后再试!") - public Result> testDatabaseRedis(@Valid @RequestBody DatabaseRedis databaseRedis) { + public Result testDatabaseRedis(@Valid @RequestBody DatabaseRedis databaseRedis) { Map map = databaseService.testDatabaseRedis(databaseRedis); - return Result.success(map); + return Result.success("连接成功"); } // POST请求映射到/test-database-connection路径 @PostMapping("/testDatabaseMysql") @@ -63,13 +62,13 @@ public class DatabaseController { @PostMapping("/findDatabaseTableFieldPrice") @ApiOperation("数据表输入") - public Result> > findDatabaseTableFieldPrice(@Valid @RequestBody DatabaseConfig config){ + public Result> > findDatabaseTableFieldPrice(@Valid @RequestBody DataRinse config){ return Result.success(databaseService.findDatabaseTableFieldPrice(config)); } @PostMapping("outDatabaseTableFieldPrice") @ApiOperation("数据表输出") - public Result outDatabaseTableFieldPrice(@Valid @RequestBody DatabaseConfig config){ + public Result outDatabaseTableFieldPrice(@Valid @RequestBody DataRinse config){ return Result.success(databaseService.findDatabaseTableFieldPrice(config)); } diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/DataSourceBaseMapper.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/DataSourceBaseMapper.java index 752abcd..a6c55d8 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/DataSourceBaseMapper.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/mapper/DataSourceBaseMapper.java @@ -3,6 +3,10 @@ package com.etl.data.source.server.mapper; import com.etl.data.source.common.pojo.DataSource; import com.github.yulichang.base.MPJBaseMapper; +import org.apache.ibatis.annotations.Param; + + +import java.util.List; /** * @ClassName DataSourceBaseMapper @@ -11,4 +15,5 @@ import com.github.yulichang.base.MPJBaseMapper; * @Date 2024/6/25 14:19 */ public interface DataSourceBaseMapper extends MPJBaseMapper { + } diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java index a5e5f61..feaa2aa 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/DatabaseService.java @@ -3,6 +3,7 @@ package com.etl.data.source.server.service; import com.etl.data.source.common.pojo.DataSource; import com.etl.data.source.common.pojo.DatabaseConfig; import com.etl.data.source.common.pojo.DatabaseRedis; +import com.etl.data.source.common.pojo.req.DataRinse; import com.etl.data.source.common.pojo.req.DataSourceColumn; import com.etl.data.source.common.pojo.req.DataSourceReq; import com.etl.data.source.common.pojo.resq.ColumnInfo; @@ -29,5 +30,5 @@ public interface DatabaseService { Map testDatabaseRedis(DatabaseRedis databaseRedis); - List> findDatabaseTableFieldPrice(DatabaseConfig config); + List> findDatabaseTableFieldPrice(DataRinse config); } diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java index 55df9a9..28118a7 100644 --- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java +++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/service/impl/DatabaseServiceImpl.java @@ -4,12 +4,18 @@ import com.etl.common.util.StringUtils; import com.etl.data.source.common.pojo.DatabaseConfig; import com.etl.data.source.common.pojo.DatabaseRedis; import com.etl.data.source.common.pojo.constants.MysqlConstants; +import com.etl.data.source.common.pojo.req.DataRinse; import com.etl.data.source.common.pojo.resq.ColumnInfo; import com.etl.data.source.server.config.RedisConfig; import com.etl.data.source.server.mapper.DataSourceBaseMapper; import com.etl.data.source.server.mapper.DataSourceTypeBaseMapper; import com.etl.data.source.server.service.DatabaseService; import lombok.extern.slf4j.Slf4j; +import net.sourceforge.pinyin4j.PinyinHelper; +import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; +import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; +import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; +import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; @@ -22,6 +28,7 @@ import redis.clients.jedis.ScanResult; import javax.sql.DataSource; import java.sql.*; import java.util.*; +import java.util.stream.Collectors; /** * @ClassName DatabaseServiceImpl @@ -32,6 +39,7 @@ import java.util.*; @Service @Slf4j public class DatabaseServiceImpl implements DatabaseService { + @Autowired private DataSourceBaseMapper dataSourceBaseMapper; @@ -56,6 +64,7 @@ public class DatabaseServiceImpl implements DatabaseService { @Override public List findDatabaseTable(DatabaseConfig config) { + List tableNames = new ArrayList<>(); try (Connection connection = getConnection(config)) { try (Statement statement = connection.createStatement()) { @@ -69,14 +78,17 @@ public class DatabaseServiceImpl implements DatabaseService { } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } + return tableNames; } @Override public List findDatabaseTables(DatabaseConfig config) { + if(StringUtils.isNull(config.getWarehouseName())){ throw new RuntimeException("请选择数据库"); } + List tableNames = new ArrayList<>(); try (Connection connection = getConnection(config)) { try (Statement statement = connection.createStatement()) { @@ -91,17 +103,21 @@ public class DatabaseServiceImpl implements DatabaseService { } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } + return tableNames; } @Override public List findDatabaseTableField(DatabaseConfig config) { + if(StringUtils.isNull(config.getWarehouseName())){ throw new RuntimeException("请选择数据库"); } + if(StringUtils.isNull(config.getTableName())){ throw new RuntimeException("请选择表"); } + List columnInfos = new ArrayList<>(); Connection connection = null; PreparedStatement preparedStatement = null; @@ -141,7 +157,6 @@ public class DatabaseServiceImpl implements DatabaseService { columnInfo.setColumnKey(resultSet.getString("COLUMN_KEY")); columnInfo.setIsNullable(resultSet.getString("IS_NULLABLE")); columnInfo.setColumnComment(resultSet.getString("COLUMN_COMMENT")); - columnInfos.add(columnInfo); } @@ -151,9 +166,9 @@ public class DatabaseServiceImpl implements DatabaseService { } finally { // 关闭资源 try { - if (resultSet != null) resultSet.close(); - if (preparedStatement != null) preparedStatement.close(); - if (connection != null) connection.close(); + if (resultSet != null) {resultSet.close();} + if (preparedStatement != null) {preparedStatement.close();} + if (connection != null) {connection.close();} } catch (SQLException e) { e.printStackTrace(); } @@ -162,14 +177,28 @@ public class DatabaseServiceImpl implements DatabaseService { return columnInfos; } @Override - public List> findDatabaseTableFieldPrice(DatabaseConfig config) { + public List> findDatabaseTableFieldPrice(DataRinse config) { + if(StringUtils.isNull(config.getWarehouseName())){ + throw new RuntimeException("请选择数据库"); + } + if(StringUtils.isNull(config.getTableName())){ + throw new RuntimeException("请选择表"); + } List> results = new ArrayList<>(); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; + DatabaseConfig databaseConfig = new DatabaseConfig(); + databaseConfig.setDriverClassName(config.getDriverClassName()); + databaseConfig.setUrl(config.getUrl()); + databaseConfig.setUsername(config.getUsername()); + databaseConfig.setPassword(config.getPassword()); + databaseConfig.setWarehouseName(config.getWarehouseName()); + databaseConfig.setTableName(config.getTableName()); + try { - connection = getConnection(config); + connection = getConnection(databaseConfig); // 这里我们仅作为示例直接构建SQL查询语句,实际中可能需要更复杂的逻辑来构建SQL String sql = "SELECT * FROM " + config.getWarehouseName() + "." + config.getTableName(); preparedStatement = connection.prepareStatement(sql); @@ -195,19 +224,95 @@ public class DatabaseServiceImpl implements DatabaseService { } finally { // 关闭资源 try { - if (resultSet != null) resultSet.close(); - if (preparedStatement != null) preparedStatement.close(); - if (connection != null) connection.close(); + if (resultSet != null) {resultSet.close();} + if (preparedStatement != null) {preparedStatement.close();} + if (connection != null) {connection.close();} } catch (SQLException e) { e.printStackTrace(); } } + results = checkRoule(results,config.getRuleTypeId()); + if(1 == config.getData()){ - insertDataExcludingId(config, results); + insertDataExcludingId(databaseConfig, results); } return results; } + public List> checkRoule(List> results, Integer ruleTypeId) { + if (ruleTypeId != null) { + // 根据不同的ruleTypeId进行不同的处理 + switch (ruleTypeId) { + case 1: + // 对results数据进行清洗,将所有包含中文的字段内容转为英文 + results = results.stream() + .map(map -> { + map.forEach((key, value) -> { + if (value instanceof String) { + String strValue = (String) value; + if (strValue.matches(".*[\u4e00-\u9fa5]+.*")) { // 判断是否包含中文 + HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); + format.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写 + format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不带音调 + format.setVCharType(HanyuPinyinVCharType.WITH_V); // 使用带 "v" 的拼写方式 + + StringBuilder englishValue = new StringBuilder(); + for (char c : strValue.toCharArray()) { + try { + String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format); + if (pinyinArray != null) { + englishValue.append(String.join("", pinyinArray)); + } else { + englishValue.append(c); // 非中文字符直接追加 + } + } catch (Exception e) { + // 处理转换异常 + System.err.println("拼音转换异常:" + e.getMessage()); + } + } + map.put(key, englishValue.toString()); + } + } + }); + return map; + }) + .collect(Collectors.toList()); + break; + case 2: + // 对results数据进行脱敏,对字段是username的进行脱敏 + results = results.stream() + .map(map -> { + if (map.containsKey("username")) { + String name = (String) map.get("username"); + if (name.length() > 1) { + // 根据姓名长度添加星号 + String desensitizedName = name.substring(0, 1); // 保留第一个字 + for (int i = 1; i < name.length(); i++) { + desensitizedName += "*"; + } + map.put("username", desensitizedName); + } + } + if (map.containsKey("userphone")) { + String userphone = (String) map.get("userphone"); + if (userphone.length() > 7) { + map.put("userphone", userphone.substring(0, 3) + "****" + userphone.substring(7)); // 保留前三位和后一位,中间用星号代替 + } + } + return map; + }) + .collect(Collectors.toList()); + break; + default: + throw new RuntimeException("不支持的规则类型ID: " + ruleTypeId); + } + return results; + } + return results; + } + + + public void insertDataExcludingId(DatabaseConfig config, List> results) { Connection connection = null; PreparedStatement preparedStatement = null; @@ -253,8 +358,8 @@ public class DatabaseServiceImpl implements DatabaseService { } finally { // 关闭资源 try { - if (preparedStatement != null) preparedStatement.close(); - if (connection != null) connection.close(); + if (preparedStatement != null) {preparedStatement.close();} + if (connection != null) {connection.close();} } catch (SQLException e) { e.printStackTrace(); } diff --git a/etl-data-source/el-data-source-server/src/main/resources/mappers/DataSourceBaseMapper.xml b/etl-data-source/el-data-source-server/src/main/resources/mappers/DataSourceBaseMapper.xml new file mode 100644 index 0000000..200b466 --- /dev/null +++ b/etl-data-source/el-data-source-server/src/main/resources/mappers/DataSourceBaseMapper.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/LimitAspect.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/LimitAspect.class index c5300bb6f41f378a2b407aeea6d401a17dd0dfbc..73ae2d822b21a1e75b9d783ba28dce5bc98ac418 100644 GIT binary patch delta 41 mcmZ1`xlD4yKPI-~)S|M~qRA}G>tM_s%$~GHxTXs delta 41 mcmZ1`xlD4yKPI;1{M_99yvZ!g>tM_s%$~Cun@!m diff --git a/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/Limit.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/Limit.class similarity index 88% rename from etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/Limit.class rename to etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/Limit.class index e1414a78130c594f1d139291aecbed840995d90e..9edf0d4552283cf07371794d548fcf4affa13a50 100644 GIT binary patch delta 18 Zcmcb^dWUs`5EEN*YEfBg(PRmxBLF{_29*E+ delta 18 Zcmcb^dWUs`5EEN+er|4l-ed`;BLF`V28RFu diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedisConfig.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedisConfig.class index 3c45f7e69cfa5b2b3a3191a503688b4002c36fe8..b2149aac787f04a8af1df14e7caee48f285e92c8 100644 GIT binary patch delta 59 zcmdnPy@z|l0TxD%$p={)HF+7>82ErtfI*Z&kU@q)h(U=#m_eOEgh7WvoWYPmg29qO NlEIBZdU7^vAOJpM2&4c2 delta 59 zcmdnPy@z|l0TxD{$p={)H3b>i7=#%37(^IEfl!7)j6sP(oI#yIfQ07H5R)Bpeg diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class index 1c78638bdb889030656182c5ebd3485c97d2620f..63c400d728ec0d89144d77ba6de3e3c97ad8bb2a 100644 GIT binary patch delta 538 zcmZ`$O-~b16g_W-GQ-R(Edzoyk`@|G`Oq3e0;aMkk_ZV29}!Gi5C*AGzF}IF4+TZ> zYXiA1+{s@c-La5`teTkM!i^!US(r3zT@c@^2?+}}=bn4+x#!*FZC?LzBbGhe`v#y9 z9}QS|QUni1O(gKtz!=6QOX`>~Fo`K0(>i9PJ}dP(3G)&bBsdyU2GUrR5zjO{-;I4z zx4&wcKk5l{EisIS=uo{zUS3YedN6aVa8*&d{%czGA8xZ#c5iaVNzkEL!@_yL zm{}KQ5r!|9ulX~7^*9SGa|E!WVU^{j#rd60>0PS;OM{`j<*uJ zB|O9?Lo@wU%f#)JHT;F|INsw!CTA#$5h~Nku5fcUUED zxgWR!Fi}lM?%(c^V6`Yi9eik@@5Kk~4pn)ZXx}r)ngsjI?g$Ug-7YC- ztwO6b`@s+rKc(OiMZKkDTJ;)341Fk|Q_q#Wvt2q>;gk*|hMQui-a(vtimO!}19aD_ b3tklwgZZGxs1Vf>{g9}`!feOE9E|(}sEC6w delta 404 zcmYk2%PvD<6ouD+jyhM=AxecD8WN->sf0;QI*^VSxTWsY{Zdrb{ZdqdgxDq$LE;JI zOvJ#*Na6)}0RsvyXT+hskyq)2UU&!Xhc}gonS&1Bv$;>UzNv=z?E(0^M}(_Q^eHp`_(! l5nd>xpcRr;L@x?zeI>lr%i9wA{#Gn*{rn!_?ZLmLpff$?3=9k=3}WmIBJ2#J8wHjyF*#~XUdX7dSg7xkSdti&nOB@@t?84M wSeB??T9TQg?~_?vV$H}<0anG0q-yh1CO$?{0R~0}cA%L|41z$G5SS$l0K2Li5C8xG delta 66 zcmX@j(ZL~b>ff$?3=9k=45I7|!t4wp8wHjyF;!|zUdX68Ie>{{awntYWNYT%qHGL| R4D3LKObh}*mLQlV1OPN`4BP+! diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/DatabaseServiceImpl.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/service/impl/DatabaseServiceImpl.class index 39c51fca45a5077f7b3f873a051fdce8adb4ca6c..7d5267a1973bc0f2eb8d806bbc151a69c31326a8 100644 GIT binary patch literal 19104 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 + + + + + + diff --git a/etl-data-source/el-data-source-server/target/el-data-source-server-1.0-SNAPSHOT.jar b/etl-data-source/el-data-source-server/target/el-data-source-server-1.0-SNAPSHOT.jar deleted file mode 100644 index 04077e8dd434ae52744b7234c486f10dd4b64a2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3690 zcmbVP3pmql8y~_5t&kz*6)76_MiC{)u+3qj97@BS8e7|94v7vv%b_plgfNFv((6=? zQFAIy;!8s4EmX!^MAM7!Kg@bxaeeQ1@7n+WT-Wa3@427nexCdO%^JbCP8h_tWXgYz zEew_(Lckkka>M{;ZfUA+z2pW4B>`^p9iNc|;O9%gSK>!El!2wWsfq0oHI(TDs`V)n z0aI%iMZi=Tt!*V}jm|v-?}@uD7|pv8Fhj85yBzz3&8l^Zl!~+{v^WB7OHNlQl-RO< zQ~VyZWQh1v^n^t8*Vf7Cz=|}BJtT{|Vk=z_y`Jjn4;lQBdWqvj3AoGyLqP&T5r?WM z6(CN8poIv5pq6bNFml8DF0Wyw2YAT?OUA9?CHjMxJBEx|!?zrV3$7&m8KN6@ z4TS6}2ojd)k0mYx7x%x;#7j1m2L$ru1%cR6x#IC;5}Al0s0I4s($RgEk2Ih)F2w;} zkItBWXj5)>6oHW@KZeu>NELc>(%S zRj;omC0nbb?Nefk=^%PpCe?YJT+(pLp$|rIYKS(%HcDGICKE1Um3xDDAZ3F+^pP6u zqRNh4X7W)Zv2H9^9cb{xrODaQ#AhWvg!wLShfxXFC#T;SZXw3)NPDGC=2L5nKf4h= zLW%czE*Iqi8*$EnxJM1Tv*y6YZj~W-*Y%Zq^?tAMIo6w)Z0r@MS$0c=uUNy-5_PSk zk>6=IUgndThLgS&D1QGje~EpO)mQs(M}0axPg7UXYL}%}P57SCQjA2#%gSe+I?dFO z?kY9bySiV4eBf5mt(0!>)b5Vs4Ig9r>DiO`zQTX^*M7;nG4~kR>Q`>3V`av0cGdkt z3Uhslmb7E>bB^I+qHNkO7^MS=ngtSdaP176;EaJYWxH@rY!{MlKp^0}-7sWtyq}sI z4nrcPqwD>|;gGX_9k@!-(wtK30p5H~!4LzmmYtH!Kq)UZlQ8hEuhJ>`xbByro;iD~ z%&jv#vpeap9Bu_iY7ab)9;&$(nDN{ATyHNg<$@I4{+>)$N0UsYh|};}!#@m1($1N; zVTYiV|FTdGpx@iyd&6V|Ui}o=lB@cSN;rQsul(A(#8RmjU#>I=^5*kg7Z{lhIdK!I zjU`7zWjD^8)vGg#xcZw;(UARzKRYj@Psn_a&u`Q|D0=dCT&FK;uiTF5eQ6Te1&#WS z&7G{u&!NS4NFJr}M`Nv`584I#nm9Hm(cKNMNbeUXDM;@X&wW2!iOiiHB1sESTa4l2 z_N)gyx?@N?5y6&uzXsJL!*+7jW9;MBNU6QbF-#>*qw10G=B%FTnf%UEE{uEAWiKrg ziFqpTlQYXshbza>a;w%CDfoC6dju8-(%ckYmkcN=%%JD)gt4ql{NoiYGp@SG&hl1? zO>XY?18vt+=y6dz8Rq-t6D2x5@0+iez@$L?$i9~k`@5P9cIS!77H&N-`qsQTP-b*% zhL&Sn_(M+OR~FI@K;oARsV~MK>$iNJS2{yiIs=77%{9RL$LjI-TCKJQ3X6lWOAu_a z1i@Amlz5<^SJw7e>hgg=G%*lJ>mPFwfB-4JxMxTEt$H*dq2n$#cEK@yFT4$RuFHz? zjz1|cnO9R8D-@wvj?35AWS;A9uG#vtqC&`i93DQ(AgX*bjvIgdqieIn;BC zrn`girjG*-;oAR?4FaQ&0&pBrNk z>YD?LUsRi_CnHMJ9DCa-di4+Qs(Iei*v`{d_KOadR!^9?a7pRLhdiNItV|MIYDqoj1Iy3YE~jl~TR z?6(710@1BG21pU1(w!3gWH-O6%qPa{s9+C$2HvCpF5alx3to>>DTEY)!##vIj|mF9 z<=uK)EKzm}C5~pg2({FScZgPAaW{CLG;uo8DG7G3V4J2oMP|FyXm&wKbCNXf_J)#i z3;3=us|CA11WXcoz5`e1!@tks zukT`QsZHJ_XMMGQBFB1aR8U?E>$u)Zrz`d%>}Z^+sU)HHW82a3n|gza?@7NZ7a)pO#Z07+30M`BUv2kRE|HQBFjMRJ=gZ9*x=MWeGl?_#$$d~@@}I1zA>Bo zn9t6!pH$=GFJhU)o#z6kEI!NV%qV)JKP1tEUiGGK3k`ll)z5G$JK_B@GfToDlIgW= z;K+~zD~Rbm)>UI0JSx?XdOcmvs>?IsmFu?D@I1SN$FAx9>!K%Z;X;Hy>0Xz(eCt@h z&*2}f+Tp2_)V?6()NuNn@U$>D!#1pVY zvNx6_+Kdo>EDr%auNjaNDBgSX6-qt|J+fhjhr~ncP$+dYMSWmif96y@7ADkUC!#Sw z@OCpY?M(1xf}c<+Z<%zCbaZ%n`XPj`b}-uShAs4L==8)s1a-n*Ehb}A0)fw1YlFQ(?3d3?E;1K;>TXLv!!t(*5zbH-a2K-#@ zaG};fZ~4mxEUjWGhW|nPaOYatGuaJx(IBAtd2{|Bjs>UPa@M#K%x<_`u>VRh5I3j& zuFk@4z+9F)Yp|@=jyc?5(9aq&hdn3!+dt-BYR}vq{CSn(P7wk8^;^DJi#xcy2|o{? YJq5SsSR?oa*lc3JX9mc;<3bVmFQ8~Gxc~qF diff --git a/etl-data-source/el-data-source-server/target/maven-archiver/pom.properties b/etl-data-source/el-data-source-server/target/maven-archiver/pom.properties deleted file mode 100644 index 935ab4d..0000000 --- a/etl-data-source/el-data-source-server/target/maven-archiver/pom.properties +++ /dev/null @@ -1,5 +0,0 @@ -#Generated by Maven -#Fri Jun 21 15:04:44 CST 2024 -groupId=com.bwie -artifactId=el-data-source-server -version=1.0-SNAPSHOT diff --git a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 8fc62ec..e69de29 100644 --- a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1 +0,0 @@ -com\etl\data\source\server\ElDataSourceServerApplication.class diff --git a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 050180e..bb104b0 100644 --- a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1 +1,28 @@ +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\mapper\DataSourceTypeBaseMapper.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\config\Limit.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\impl\TaskServiceImpl.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\config\RedissonConfig.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\mapper\TaskMapper.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\controller\RuleController.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\RuleService.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\aop\LimitAspect.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\mapper\CodeBaseMapper.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\controller\TaskController.java D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\ElDataSourceServerApplication.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\mapper\RuleBaseMapper.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\impl\DataSheetServiceImpl.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\config\Swagger.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\controller\DatabaseController.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\impl\RuleServiceImpl.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\GlobalExceptionHandler.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\mapper\DataSourceBaseMapper.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\DatabaseService.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\impl\DataSourceServiceImpl.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\DataSheetService.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\config\RedisConfig.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\TaskService.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\controller\DataSheetController.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\controller\DataSourceController.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\mapper\DataSheetMapper.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\impl\DatabaseServiceImpl.java +D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\main\java\com\etl\data\source\server\service\DataSourceService.java diff --git a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst deleted file mode 100644 index f7ea04e..0000000 --- a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +++ /dev/null @@ -1 +0,0 @@ -com\etl\data\source\server\ElDataSourceServerApplicationTests.class diff --git a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst deleted file mode 100644 index 688572d..0000000 --- a/etl-data-source/el-data-source-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ /dev/null @@ -1 +0,0 @@ -D:\workspace\etl-cloud\etl-data-source\el-data-source-server\src\test\java\com\etl\data\source\server\ElDataSourceServerApplicationTests.java diff --git a/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests$Person.class b/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests$Person.class deleted file mode 100644 index 163eaf829b18398c459d6d63ff6cd3bc4ff6fbc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1055 zcmb_b+iuf95IyUdI5AF>xm;fR)Pd6l`2IADOFJ)H_0lva@LXU^ab%x zAkkC;i4WkT5VLlGa8Y@Hhn?9uvomKd+RtA;d;;(g4@{J>T7-qF61NSknb5IXz`D{K zO57>nuF^Fn90RU_O$J@^kzlYp$NYqQ0hdFsn?$}GZZqWgkX%c1u05HEp@_(rf8BJ8P zB4Q|IwY*lVXw@tJwG^2_^a-8XZ~#NvKVbREUiw(8lR@ zM0SpJ**ybuH&3CtjZ@^_r4KKsPj!+N`ZkLwQs4rGULmBKg<%=j$)W@)4NGr|NFxH; z*^K68Y6H!W(2ve=!Ol-%xbLBns???^*u@OUO<`8v5HQ8Xx0FnSDk4v5Kvas@O7G1X Uv4)%Jt6R86+9aQaIp2u2!=R3%piosSI^94Xz1x4yL(V7 zOSf*V(q&dGEiDz1D$AXgRW7v3D&6`ov^4R%Jp)W4r3*qaeQ%$8?m6H6&UbGAaR2LX z0Gx*%M<*_7xD-d7952T(7{?HX<4|#>5hJ)7!%H!Y%IR1m#xWru*BZDyso~`~T5w&i zP07cN2E2lF9MhQ5FsorsLH(TYeAiK+PdSe8#%j z&7Pn!6WTJNX|zCh#n$FeG8sm#XL| z50|Q^!h+0bdIdsnKOkY4&MnDPw^rbk1IsqjmLG6qQ_dEqBl2^i;-Z%w>z%ULeQl}P zkr8r3=flixly=#>RpTmy4?mu>jWFk8O=zNcjFFo%ftg#IHcO!dG`y;3=256D_8NZc$tfmIX>mTys8qmJVSp*mQf3u)IY7=B4AVc9c_;$7EUGqSE5 z7y-3oAONR|~$97?TK2`PwF-gGWEM50D+VCi2%!e}x5; z(Xu*n=+cn~lPv2fU`2zaV-;%(t{mzN6!w0b&1P3cjCKhP9QQ4sXe)=j%CW|w6{PxV!#7ANoylshu;9CpnM_+T{TZqxyyUn?b;6gUyZ#}zYD}50K>4;GfQC}7q6jmL zyS7c{c#Va3R8(FJJbgX!j@tHrI1@q*|CtRx5Jl#7%S6~w$!odB95o-18etZBhKiIQ zHuGds_JPf-^FV$UZ~`6tu*knU{@4^y@FZsjM}=eb^cIv)!{w*=tPhQG9OqoGIG`I( z^R0oQo}q=CmG2RyC-B=2>Xx<;N%!wSU22QACcZ-b7PM`|>abWbHYkr6;;r5P_IhM% zHSTo(HX0SooY{u1;A8Z2(xl*9sDo-k{T$8TK~Ja=hWi4|sf1d|yZPYf9keW^w$M70 z+QtzDDeh|{BEB)4+*=LUC1=%$(a+GHh<=Hqn-6}Mgs6~&+&~+jClKS|kK-f;aEhPZ z9yWO|J2;8E=)?O+;RCLGNLD|>Io!hw*yK0;6I{fPxP)JD8NXsMBz1(u-DMR{GLFjC zSU8JHG8y$*jxqd%=NMgK{0(O4W##TMN*_)mg8mRqr0SL0^GfY`ouStNy-p!|9|a9Y v_bObZVl%&oc)u>iV&)l#(BKRQC9x~$0zuUbFNZ6#}NAmLsLrD diff --git a/etl-gateway/pom.xml b/etl-gateway/pom.xml index 3d93677..d3f7717 100644 --- a/etl-gateway/pom.xml +++ b/etl-gateway/pom.xml @@ -92,10 +92,29 @@ sentinel-spring-cloud-gateway-adapter 1.8.4 + + org.redisson + redisson-spring-boot-starter + 3.21.1 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.springframework.boot spring-boot-starter-data-redis - 2.4.0 diff --git a/etl-gateway/src/main/resources/bootstrap.yml b/etl-gateway/src/main/resources/bootstrap.yml index d13bfdd..5930d6a 100644 --- a/etl-gateway/src/main/resources/bootstrap.yml +++ b/etl-gateway/src/main/resources/bootstrap.yml @@ -9,12 +9,12 @@ spring: nacos: #注册服务 discovery: - server-addr: 115.159.33.152:8848 - namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + server-addr: 182.254.221.163:8848 + namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 # 配置 config: - server-addr: 115.159.33.152:8848 - namespace: f9f293d4-55ce-45c1-aa15-124ca461c060 + server-addr: 182.254.221.163:8848 + namespace: 10a15e4b-3457-44dc-9378-cc25849f1872 # 配置文件格式 file-extension: yml logging: diff --git a/etl-groovy/pom.xml b/etl-groovy/pom.xml index df86b7c..a155f30 100644 --- a/etl-groovy/pom.xml +++ b/etl-groovy/pom.xml @@ -15,6 +15,15 @@ UTF-8 + + com.yomahub + liteflow-spring-boot-starter + 2.10.6 + + + org.springframework.boot + spring-boot-starter-web + com.bwie etl-common diff --git a/etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java b/etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java index b1ce458..8780772 100644 --- a/etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java +++ b/etl-groovy/src/main/java/com/etl/groovy/SpringBootGroovyApplication.java @@ -2,19 +2,14 @@ package com.etl.groovy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; - -import groovy.lang.GroovyShell; -import groovy.lang.Script; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.context.annotation.ComponentScan; -@SpringBootApplication +@SpringBootApplication(scanBasePackages = {"com.etl.groovy"}) +@ComponentScan("com.etl.groovy.config") public class SpringBootGroovyApplication { public static void main(String[] args) { SpringApplication.run(SpringBootGroovyApplication.class, args); } - - } diff --git a/etl-groovy/src/main/java/com/etl/groovy/config/ACmp.java b/etl-groovy/src/main/java/com/etl/groovy/config/ACmp.java new file mode 100644 index 0000000..c6e1763 --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/config/ACmp.java @@ -0,0 +1,14 @@ +package com.etl.groovy.config; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("acmp") +public class ACmp extends NodeComponent { + + @Override + public void process() { + //do your business + System.out.println("acmp执行"); + } +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/config/BCmp.java b/etl-groovy/src/main/java/com/etl/groovy/config/BCmp.java new file mode 100644 index 0000000..b9f7618 --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/config/BCmp.java @@ -0,0 +1,14 @@ +package com.etl.groovy.config; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("bcmp") +public class BCmp extends NodeComponent { + + @Override + public void process() { + //do your business + System.out.println("bcmp执行"); + } +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/config/CCmp.java b/etl-groovy/src/main/java/com/etl/groovy/config/CCmp.java new file mode 100644 index 0000000..b58845a --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/config/CCmp.java @@ -0,0 +1,14 @@ +package com.etl.groovy.config; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("ccmp") +public class CCmp extends NodeComponent { + + @Override + public void process() { + //do your business + System.out.println("ccmp执行"); + } +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/controller/GroovyTestController.java b/etl-groovy/src/main/java/com/etl/groovy/controller/GroovyTestController.java new file mode 100644 index 0000000..cbe7dfb --- /dev/null +++ b/etl-groovy/src/main/java/com/etl/groovy/controller/GroovyTestController.java @@ -0,0 +1,48 @@ +package com.etl.groovy.controller; + +import groovy.lang.GroovyShell; +import groovy.lang.Script; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName GrooyTestController + * @Description 描述 + * @Author ZeZhang.Liu + * @Date 2024/6/26 16:58 + */ +@RestController +@RequestMapping("/groovy") +public class GroovyTestController { + @GetMapping("/test") + public Object test() { + // 创建GroovyShell + GroovyShell groovyShell = new GroovyShell(); + + // 装载解析脚本代码 + String scriptText = + "import com.etl.groovy.service.GroovyTestService\n" + + "import com.etl.groovy.util.SpringContextUtil\n" + + "\n" + + "def getBean() {\n" + + " GroovyTestService groovyTestService = SpringContextUtil.getBean(GroovyTestService.class);\n" + + " groovyTestService.removeDashesFromAddress()\n" + + "}\n" + + "\n" + + "// 如果需要,你可以在这里定义方法或变量来模拟静态变量的行为\n" + + "def getParam1() {\n" + + " return \"通过方法获取的模拟静态变量\"\n" + + "}\n"; + + // 解析脚本 + Script script = groovyShell.parse(scriptText); + + // 执行getBean方法 + script.invokeMethod("getBean", null); + + // 尝试获取模拟的静态变量(通过方法) + Object param1 = script.invokeMethod("getParam1", null); + return param1; + } +} diff --git a/etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java b/etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java deleted file mode 100644 index 3b9b3ca..0000000 --- a/etl-groovy/src/main/java/com/etl/groovy/controller/GrooyTestController.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.etl.groovy.controller; - -import groovy.lang.GroovyShell; -import groovy.lang.Script; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @ClassName GrooyTestController - * @Description 描述 - * @Author ZeZhang.Liu - * @Date 2024/6/26 16:58 - */ -@RestController -@RequestMapping("/groovy") -public class GrooyTestController { - @RequestMapping("/test") - public String test() { - //创建GroovyShell - GroovyShell groovyShell = new GroovyShell(); - //装载解析脚本代码 - Script script = groovyShell.parse("package groovy\n" + - "\n" + - "import com.etl.groovy.service.GroovyTestService\n" + - "import com.etl.groovy.util.SpringContextUtil\n" + - "\n" + - "/**\n" + - " * 静态变量\n" + - " */\n" + - "class Globals {\n" + - " static String PARAM1 = \"静态变量\"\n" + - " static int[] arrayList = [1, 2]\n" + - "}\n" + - "\n" + - "def getBean() {\n" + - " GroovyTestService groovyTestService = SpringContextUtil.getBean(GroovyTestService.class);\n" + - " groovyTestService.removeDashesFromAddress()\n" + - "}"); - //执行 - script.invokeMethod("getBean", null); - return "ok"; - } -} diff --git a/etl-groovy/src/main/resources/bootstrap.yml b/etl-groovy/src/main/resources/bootstrap.yml index 96fc4be..6d48b65 100644 --- a/etl-groovy/src/main/resources/bootstrap.yml +++ b/etl-groovy/src/main/resources/bootstrap.yml @@ -21,3 +21,61 @@ mybatis-plus: map-underscore-to-camel-case: true type-aliases-package: com.etl.groovy.entity mapper-locations: classpath:mappers/*xml +liteflow: + #规则文件路径 + rule-source: config/flow.el.xml + #-----------------以下非必须----------------- + #liteflow是否开启,默认为true + enable: true + #liteflow的banner打印是否开启,默认为true + print-banner: true + #zkNode的节点,只有使用zk作为配置源的时候才起作用,默认为/lite-flow/flow + zk-node: /lite-flow/flow + #上下文的最大数量槽,默认值为1024 + slot-size: 1024 + #FlowExecutor的execute2Future的线程数,默认为64 + main-executor-works: 64 + #FlowExecutor的execute2Future的自定义线程池Builder,LiteFlow提供了默认的Builder + main-executor-class: com.yomahub.liteflow.thread.LiteFlowDefaultMainExecutorBuilder + #自定义请求ID的生成类,LiteFlow提供了默认的生成类 + request-id-generator-class: com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator + #并行节点的线程池Builder,LiteFlow提供了默认的Builder + thread-executor-class: com.yomahub.liteflow.thread.LiteFlowDefaultWhenExecutorBuilder + #异步线程最长的等待时间(只用于when),默认值为15000 + when-max-wait-time: 15000 + #异步线程最长的等待时间(只用于when),默认值为MILLISECONDS,毫秒 + when-max-wait-time-unit: MILLISECONDS + #when节点全局异步线程池最大线程数,默认为16 + when-max-workers: 16 + #并行循环子项线程池最大线程数,默认为16 + parallelLoop-max-workers: 16 + #并行循环子项线程池等待队列数,默认为512 + parallelLoop-queue-limit: 512 + #并行循环子项的线程池Builder,LiteFlow提供了默认的Builder + parallelLoop-executor-class: com.yomahub.liteflow.thread.LiteFlowDefaultParallelLoopExecutorBuilder + #when节点全局异步线程池等待队列数,默认为512 + when-queue-limit: 512 + #是否在启动的时候就解析规则,默认为true + parse-on-start: true + #全局重试次数,默认为0 + retry-count: 0 + #是否支持不同类型的加载方式混用,默认为false + support-multiple-type: false + #全局默认节点执行器 + node-executor-class: com.yomahub.liteflow.flow.executor.DefaultNodeExecutor + #是否打印执行中过程中的日志,默认为true + print-execution-log: true + #是否开启本地文件监听,默认为false + enable-monitor-file: false + #是否开启快速解析模式,默认为false + fast-load: false + #简易监控配置选项 + monitor: + #监控是否开启,默认不开启 + enable-log: false + #监控队列存储大小,默认值为200 + queue-limit: 200 + #监控一开始延迟多少执行,默认值为300000毫秒,也就是5分钟 + delay: 300000 + #监控日志打印每过多少时间执行一次,默认值为300000毫秒,也就是5分钟 + period: 300000 diff --git a/etl-groovy/src/main/resources/config/flow.el.xml b/etl-groovy/src/main/resources/config/flow.el.xml new file mode 100644 index 0000000..ef0fc50 --- /dev/null +++ b/etl-groovy/src/main/resources/config/flow.el.xml @@ -0,0 +1,6 @@ + + + + THEN(acmp, bcmp, ccmp); + + diff --git a/etl-groovy/target/classes/bootstrap.yml b/etl-groovy/target/classes/bootstrap.yml index 96fc4be..6d48b65 100644 --- a/etl-groovy/target/classes/bootstrap.yml +++ b/etl-groovy/target/classes/bootstrap.yml @@ -21,3 +21,61 @@ mybatis-plus: map-underscore-to-camel-case: true type-aliases-package: com.etl.groovy.entity mapper-locations: classpath:mappers/*xml +liteflow: + #规则文件路径 + rule-source: config/flow.el.xml + #-----------------以下非必须----------------- + #liteflow是否开启,默认为true + enable: true + #liteflow的banner打印是否开启,默认为true + print-banner: true + #zkNode的节点,只有使用zk作为配置源的时候才起作用,默认为/lite-flow/flow + zk-node: /lite-flow/flow + #上下文的最大数量槽,默认值为1024 + slot-size: 1024 + #FlowExecutor的execute2Future的线程数,默认为64 + main-executor-works: 64 + #FlowExecutor的execute2Future的自定义线程池Builder,LiteFlow提供了默认的Builder + main-executor-class: com.yomahub.liteflow.thread.LiteFlowDefaultMainExecutorBuilder + #自定义请求ID的生成类,LiteFlow提供了默认的生成类 + request-id-generator-class: com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator + #并行节点的线程池Builder,LiteFlow提供了默认的Builder + thread-executor-class: com.yomahub.liteflow.thread.LiteFlowDefaultWhenExecutorBuilder + #异步线程最长的等待时间(只用于when),默认值为15000 + when-max-wait-time: 15000 + #异步线程最长的等待时间(只用于when),默认值为MILLISECONDS,毫秒 + when-max-wait-time-unit: MILLISECONDS + #when节点全局异步线程池最大线程数,默认为16 + when-max-workers: 16 + #并行循环子项线程池最大线程数,默认为16 + parallelLoop-max-workers: 16 + #并行循环子项线程池等待队列数,默认为512 + parallelLoop-queue-limit: 512 + #并行循环子项的线程池Builder,LiteFlow提供了默认的Builder + parallelLoop-executor-class: com.yomahub.liteflow.thread.LiteFlowDefaultParallelLoopExecutorBuilder + #when节点全局异步线程池等待队列数,默认为512 + when-queue-limit: 512 + #是否在启动的时候就解析规则,默认为true + parse-on-start: true + #全局重试次数,默认为0 + retry-count: 0 + #是否支持不同类型的加载方式混用,默认为false + support-multiple-type: false + #全局默认节点执行器 + node-executor-class: com.yomahub.liteflow.flow.executor.DefaultNodeExecutor + #是否打印执行中过程中的日志,默认为true + print-execution-log: true + #是否开启本地文件监听,默认为false + enable-monitor-file: false + #是否开启快速解析模式,默认为false + fast-load: false + #简易监控配置选项 + monitor: + #监控是否开启,默认不开启 + enable-log: false + #监控队列存储大小,默认值为200 + queue-limit: 200 + #监控一开始延迟多少执行,默认值为300000毫秒,也就是5分钟 + delay: 300000 + #监控日志打印每过多少时间执行一次,默认值为300000毫秒,也就是5分钟 + period: 300000 diff --git a/etl-groovy/target/classes/com/etl/groovy/SpringBootGroovyApplication.class b/etl-groovy/target/classes/com/etl/groovy/SpringBootGroovyApplication.class index 5ff0ac88694d841f62ba188a8bb705d6df9e9b15..999765bc2340cfa2c7221a5ee130c94bd4ad4443 100644 GIT binary patch delta 363 zcmY*TyGjE=6g@N9SJpMgn5bFfBVZvZb}cjrLJ9>dLBYbpYFO4Kn9N9a6R`3dbUwpM z3l$4Lz^|~j@(aYfs~}Es?mcrJ+;{KO^54E*UIA>O?ZQCQhVNntEgQ=>+YkDYZR#V| z;=RLLqp1)0`UXQajfC72X?!fA3z5VrLnTtfAkGFsGE!=C#n2^xT}#912`N=3vc8hx zz8YRC8O!X13U(RHi5QGyhQ|MN5Gi@yPdu2gwBn();$anQ`lEDrjW#%)nLiF{fJJB% z3u!W%X6Fg)zK|WlTn1c}3B4Z!u_f(b1ID3q%?+>%gi?zaF^=@I881𝔎%VYc)1i*XjK=|l_$PP) z1QH*>MjwO3Md-h&??c03)_UQ|NOSs`+J5E(_+Cc-&3R(`PaH@(kc3rIE ztOE~z73V5A&oFaSM$+77m~1px8K#z1UogydWF+pT!=BI&c`qbMy`usiu5vByz7S5C zb(t_Mb^|kj9ebFnpP{T!BV%YbaiZHe#=D`LZ2shVo965}Y zHZFPbsI|OY>?J~vWFWk}nhzWV8U<_O-nmjA*@*Po#a10Z4KiX#!%yu$;XKClt%4nT#eE@q$KNFav?@T6~#ZLOK zh)fTg3vgJWhWnGITdbC>U1B=K>Cp qmpKagAP$lBVX~Vg$q{;wJ_SqQlJr=H{7-f|PZ-B(zo~HoCxP$Mipg{U diff --git a/etl-groovy/target/classes/com/etl/groovy/config/ACmp.class b/etl-groovy/target/classes/com/etl/groovy/config/ACmp.class new file mode 100644 index 0000000000000000000000000000000000000000..5a368fad2776a2d0a618b394e2cc721b3d3b5738 GIT binary patch literal 635 zcmZ`$&2G~`5dJnz;@Azeq!ef=6xsuA59|erLlIIHiIY_!f^y%Ojl1C8vDWKUc?2Y0 zf)i&rfW(0Z;6V^iffy%Mdx4d9$1~r2-~9OJpYJ~aJi&f~E;eJ_!tEaJB-p}sgu4-T z1iH_RGvT?w%E94Spgp8FT3{_TPM_9xqWx<%DL67nDO1H*dDHk8!FD(^mB3D#k(D|W zGWSHYxy;B-O)gJ{wmcSyN>7=tI58Pf?KAztG>UNpKYpubN?_|%?Sip-Y%0U@C(cn& z!H{FpQA$3SRq2h(r(RioPX3*&g7%uiywq|?wj`%r;98xTDry#QtIU>tMCe7h*T;SA za`h(m>;0$SA3sER(8ojU32gtrb%93>I47&l>WM5&(9?p>c{;Det$W8T4%xRead@W+Q^?zzLivN`AtQZRhA4#ODQ^@Y`JkBdqdwf0@Ac8hZlQFUe0AVnF-_t-;Dyw66pbh8k** aNmnBAg-8o)jJB|j8*Eoubij9`!p*AjV16USOr&@ys{hH$VRQ=lc%;kFcMhi_I7}aI=S73AV5u;dX=_ zf$kIIOn54=a&R~nXbPULW_dC$Rnh)&(9k;GC>FttYZDK~D=hSQRG~j(G=5;!-j+!yg}xx#tf5%I37d z>FDtrvnSaKwwx literal 0 HcmV?d00001 diff --git a/etl-groovy/target/classes/com/etl/groovy/config/CCmp.class b/etl-groovy/target/classes/com/etl/groovy/config/CCmp.class new file mode 100644 index 0000000000000000000000000000000000000000..d6978cbfd0e928f16b119ae00b9973c0b15a01b3 GIT binary patch literal 635 zcmZ`$&2G~`5dJnz;@Azeq!ef={|DM0*b5SeA|w=vlT{&ta^IMZyWrii*6UPx1SDR9 z6K6Pp#DNFkK@d-Y7&}#aft7a0Gv9pQ{P^de?>_)M#)AZXY{$5U>jT_Ku!G$QHzVu` z^q(4M!ZU%j{e!7McT8`zz(#7EKCbOd``2n#aAcHHri!WZrt!~$-Ed+mfxR>%D|IMj z?uiylnUR~DT#m=KJQ9dXPnoVbF_}>9GyTFeig5!!daD*nVCPlsg0XsPD#P;6ouiG9mB98Adjglw$xm7_ApU~RXzeSy7Xk@G4Ryez Z3z7Itq=OAcJJ`e(w(Bf9;=5Jh>R;LwlN$g4 literal 0 HcmV?d00001 diff --git a/etl-groovy/target/classes/com/etl/groovy/controller/GroovyTestController.class b/etl-groovy/target/classes/com/etl/groovy/controller/GroovyTestController.class new file mode 100644 index 0000000000000000000000000000000000000000..f91cabdcd4ecaa7b491fef3e85703e7ba84c5ab4 GIT binary patch literal 1582 zcmb7E-;Wbj6#j18-Ik#OTTv*Aj;kx}!p?y1gAp}B47_xa&}9wrY1&@87p8OTo!g=@ zCW|py4IB5#jcgW$2MAB7F=6G0^6uZUE$x&4f#J+dDL+~hnPle7eD^!wx#!F|_wRpi z{{>(g(*_JoB=M$!7$#EK6WCk|c>|N!o5H>%rjoE2M&A>j&>t|wbNM-j#9>+C3|kAr zS_!X8jM0cev7V4AhJL|%-BC{Mz?0tnon%imJS}Q`PWXcIKIC~)J6cGO z(w;6zRki(k5a={%@N-g~wa@XAT@qf!cKTfVDAzMiy&i37r0KW~s_2Lv)xapqhAQ(T zA}DiqSiP*EL=5lz?|3JkF88yze%2uGN83&Ierg(@F^~Zme$H`mViltNr^A?Qd6F%RhD( zm)n=Fwy$4lU--Fu>0*1~d<5QK{ibteY2%OE4--EgwrM|g#dSk@=6H8uwR3MVQtW)c z-dbKE&q29y+F=?t_A?}V*(Y%zjkoYN!zMx^c?Rp*MwwyT)ALK6O(W$~Gv{)H1DPK_ zg_)?>(K!&!CPP|yO?j5ja6K<8)c-@|9t+T$*&zoCUc)9j4udNOI$e;a=X3OBlVxN_ zCfC7!3zxUhb2J3Uu$A5eDiN>^V`S-+!1E*$IA1`VaA4vNVyD&-FJuxkd-vVM$g!!+ zD7%T|CsUbJVBbw-6TcEMhCqB5$pbGSg`KpMJtRAcET%9HD-1XtiS`1fup8Tn9qf7+ zUc?Sk86#vT`NYX5PUuTW;APU>Lag0%zw#-Vk5`Fl5*nlIgVhYZjgx)7&v@ejbI9x$ literal 0 HcmV?d00001 diff --git a/etl-groovy/target/classes/config/flow.el.xml b/etl-groovy/target/classes/config/flow.el.xml new file mode 100644 index 0000000..ef0fc50 --- /dev/null +++ b/etl-groovy/target/classes/config/flow.el.xml @@ -0,0 +1,6 @@ + + + + THEN(acmp, bcmp, ccmp); + +