From ef045495c75e67062e7d44b211c7d2bd92e0f891 Mon Sep 17 00:00:00 2001 From: q1279335527 <1279335527@qq.com> Date: Sun, 20 Apr 2025 22:02:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81http=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + README.md | 15 +- apis/pom.xml | 5 + .../common/connector/entity/bo/Linker.java | 7 +- .../common/connector/linker/ConnBuilder.java | 4 + .../common/connector/linker/LinkerHelper.java | 8 ++ .../core/constants/FolderNameConstant.java | 4 + .../common/crud/core/service/BaseService.java | 4 +- .../crud/core/service/BaseServiceImpl.java | 3 +- executor/pom.xml | 9 +- executor/viewer-executor-core/pom.xml | 6 + .../executor/core/base/AbstractExecutor.java | 7 +- .../executor/core/entity/QueryBody.java | 1 + .../core/factory/ExecutorRegistry.java | 6 +- ...ot.autoconfigure.AutoConfiguration.imports | 1 - modules/viewer-modules-ds/pom.xml | 2 + .../viewer-modules-ds-command}/pom.xml | 6 +- .../ds/command/DsCmdAutoConfiguration.java | 6 +- .../ds/command/executor/CommandExecutor.java | 41 ++++++ .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../viewer-modules-ds-core/pom.xml | 8 ++ .../ds/core/factory/ConnectFactory.java | 5 +- .../ds}/core/factory/ExecutorManager.java | 17 ++- .../core/service/LinkerConfigServiceImpl.java | 2 +- .../viewer-modules-ds-http/pom.xml | 32 +++++ .../viewer-modules-ds-http-core/pom.xml | 21 +++ .../core/DsHttpCoreAutoConfiguration.java | 11 ++ .../core/constant/RequireAttrConstant.java | 8 ++ .../core/constant/SupportTypeConstant.java | 5 + .../http/core/enums/OkHttp3BuilderEnum.java | 58 ++++++++ .../http/core/executor/HttpReqExecutor.java | 85 ++++++++++++ .../ds/http/core/linker/HttpConnBuilder.java | 129 ++++++++++++++++++ .../modules/ds/http/core/req/BaseReq.java | 58 ++++++++ .../modules/ds/http/core/req/SyncHttpReq.java | 58 ++++++++ .../main/resources/META-INF/spring.factories | 1 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../viewer-modules-ds-http-simple/pom.xml | 28 ++++ .../simple/DsHttpSimpleAutoConfiguration.java | 11 ++ .../interceptor/SelfInterceptorLoad.java | 10 ++ .../simple/linker/ManualHttpReqBuilder.java | 45 ++++++ .../linker/ManualHttpReqLinkerBuilder.java | 24 ++++ .../simple/linker/SimpleHttpReqBuilder.java | 28 ++++ .../main/resources/META-INF/spring.factories | 1 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../viewer-modules-ds-jdbc-core/pom.xml | 1 + .../core/constant/SupportTypeConstant.java | 6 + .../core/factory/MybatisSqlQueryExecutor.java | 23 ++-- .../ds/jdbc/mysql/config/MysqlDsConfig.java | 5 +- .../self/linker/ManualJdbcLinkerBuilder.java | 4 +- modules/viewer-modules-step/pom.xml | 4 - .../step/executor/SimpleBlockExecutor.java | 24 ++-- pom.xml | 15 +- 53 files changed, 809 insertions(+), 61 deletions(-) delete mode 100644 executor/viewer-executor-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports rename {executor/viewer-executor-mybatis => modules/viewer-modules-ds/viewer-modules-ds-command}/pom.xml (82%) rename executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/MybatisExecutorAutoConfiguration.java => modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/DsCmdAutoConfiguration.java (73%) create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/executor/CommandExecutor.java rename {executor/viewer-executor-mybatis => modules/viewer-modules-ds/viewer-modules-ds-command}/src/main/resources/META-INF/spring.factories (62%) create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-command/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports rename {executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor => modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds}/core/factory/ExecutorManager.java (71%) create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/pom.xml create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/pom.xml create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/DsHttpCoreAutoConfiguration.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/RequireAttrConstant.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/SupportTypeConstant.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/enums/OkHttp3BuilderEnum.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/executor/HttpReqExecutor.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/linker/HttpConnBuilder.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/BaseReq.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/SyncHttpReq.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring.factories create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/pom.xml create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/DsHttpSimpleAutoConfiguration.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/interceptor/SelfInterceptorLoad.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqBuilder.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqLinkerBuilder.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/SimpleHttpReqBuilder.java create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring.factories create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/constant/SupportTypeConstant.java rename executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/factory/MybatisTypeQueryExecutor.java => modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/factory/MybatisSqlQueryExecutor.java (90%) diff --git a/.gitignore b/.gitignore index 549e00a..0adc7c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ HELP.md +.DS_Store target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ @@ -29,5 +30,7 @@ build/ !**/src/main/**/build/ !**/src/test/**/build/ +test/ + ### VS Code ### .vscode/ diff --git a/README.md b/README.md index 98254a8..c01d869 100644 --- a/README.md +++ b/README.md @@ -81,11 +81,14 @@ java -jar viewer-apis-service.jar --spring.config.location=application.yml MIT License - 自由修改和商用,但需保留原始版权声明 ## ☎ 联系我们 -- Email: your-email@example.com -- GitHub Issues: https://github.com/your-repo/viewer/issues +- 欢迎大家提需求和建议[【新建issuses】](https://gitee.com/ThoughtSet/Viewer/issues/new)!(详细描述你的原始需求,我们会帮你提供一些方案,节约大家的成本) +- **内推项目** 如您觉得项目不错,可推荐到公司,建立长期稳定的商业合作,提供更专业的技术服务。 -## 分支命名规则 -- `feat/*`:新功能开发 -- `fix/*`:问题修复 -- `docs/*`:文档更新 +[//]: # (## 分支命名规则) + +[//]: # (- `feat/*`:新功能开发) + +[//]: # (- `fix/*`:问题修复) + +[//]: # (- `docs/*`:文档更新) diff --git a/apis/pom.xml b/apis/pom.xml index b761682..6aa4cd7 100644 --- a/apis/pom.xml +++ b/apis/pom.xml @@ -35,6 +35,11 @@ xyz.thoughtset.viewer viewer-modules-ds-jdbc-self + + + xyz.thoughtset.viewer + viewer-modules-ds-http-simple + \ No newline at end of file diff --git a/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/entity/bo/Linker.java b/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/entity/bo/Linker.java index 5651e38..16f9dd9 100644 --- a/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/entity/bo/Linker.java +++ b/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/entity/bo/Linker.java @@ -19,16 +19,17 @@ public class Linker { protected String linkerType; - public Linker(String title, String driverClassName, Map otherSettings, Boolean reactive) { + public Linker(String title, String driverClassName, Map otherSettings, Boolean reactive,String linkerType) { this.id = title; this.driverClassName = driverClassName; this.otherSettings = otherSettings; this.nativeDriver = Boolean.TRUE; this.reactive = reactive; + this.linkerType = linkerType; } - public Linker(String title, String driverClassName) { - this(title, driverClassName, null, false); + public Linker(String title, String driverClassName,String linkerType) { + this(title, driverClassName, null, false,linkerType); } } diff --git a/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/ConnBuilder.java b/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/ConnBuilder.java index 4881a50..549a065 100644 --- a/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/ConnBuilder.java +++ b/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/ConnBuilder.java @@ -18,5 +18,9 @@ public abstract class ConnBuilder { public abstract Object buildConnect(ConnectorMeta connectorMeta, Properties properties); + public Object unloadConnect(ConnectorMeta connectorMeta, Properties properties) { + return null; + } + } diff --git a/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/LinkerHelper.java b/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/LinkerHelper.java index 68cc9a3..8b58196 100644 --- a/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/LinkerHelper.java +++ b/commons/viewer-common-connector/src/main/java/xyz/thoughtset/viewer/common/connector/linker/LinkerHelper.java @@ -46,6 +46,14 @@ public class LinkerHelper{ return linkerTypeCache.get(linkId); } + public static String getTarExecType(String linkId) { + if (!connectorCache.containsKey(linkId)) { + log.error("Linker not found for id: {}", linkId); + return null; + } + return connectorCache.get(linkId).dataLinker.getLinkerType(); + } + public static void registerConn(ConnBuilder connBuilder) { Linker linker = connBuilder.getDataLinker(); registerConnectorToCache(linker.getId(), connBuilder); diff --git a/commons/viewer-common-core/src/main/java/xyz/thoughtset/viewer/common/core/constants/FolderNameConstant.java b/commons/viewer-common-core/src/main/java/xyz/thoughtset/viewer/common/core/constants/FolderNameConstant.java index 4d4afeb..baf67d3 100644 --- a/commons/viewer-common-core/src/main/java/xyz/thoughtset/viewer/common/core/constants/FolderNameConstant.java +++ b/commons/viewer-common-core/src/main/java/xyz/thoughtset/viewer/common/core/constants/FolderNameConstant.java @@ -10,4 +10,8 @@ public class FolderNameConstant { return folderName + File.separator + fileName; } + public static String jarFileAllPath(String jarFilePath) { + return folderWithSep(FolderNameConstant.LINKER , jarFilePath); + } + } diff --git a/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseService.java b/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseService.java index bd27efb..cbf31e2 100644 --- a/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseService.java +++ b/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseService.java @@ -2,13 +2,15 @@ package xyz.thoughtset.viewer.common.crud.core.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import xyz.thoughtset.viewer.common.core.entity.IdMeta; import java.util.LinkedHashMap; import java.util.List; -public interface BaseService extends IService { +public interface BaseService extends IService { public Object createData(LinkedHashMap baseMap); + public Object updateData(LinkedHashMap baseMap); public Object saveData(LinkedHashMap baseMap); diff --git a/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseServiceImpl.java b/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseServiceImpl.java index 1662394..9825194 100644 --- a/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseServiceImpl.java +++ b/commons/viewer-common-crud/viewer-common-crud-core/src/main/java/xyz/thoughtset/viewer/common/crud/core/service/BaseServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import xyz.thoughtset.viewer.common.core.entity.IdMeta; import xyz.thoughtset.viewer.common.crud.core.util.MPWrapperUtil; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; @@ -13,7 +14,7 @@ import java.util.LinkedHashMap; import java.util.List; @SuppressWarnings({"unchecked","SpringJavaInjectionPointsAutowiringInspection"}) -public class BaseServiceImpl , T> extends ServiceImpl implements BaseService { +public class BaseServiceImpl , T extends IdMeta> extends ServiceImpl implements BaseService { @Autowired protected ObjectMapper mapper; diff --git a/executor/pom.xml b/executor/pom.xml index 9c65edd..1c8681a 100644 --- a/executor/pom.xml +++ b/executor/pom.xml @@ -12,7 +12,6 @@ executor pom - viewer-executor-mybatis viewer-executor-core @@ -24,10 +23,10 @@ - - xyz.thoughtset.viewer - viewer-modules-ds-core - + + + + \ No newline at end of file diff --git a/executor/viewer-executor-core/pom.xml b/executor/viewer-executor-core/pom.xml index 3acfa07..530021f 100644 --- a/executor/viewer-executor-core/pom.xml +++ b/executor/viewer-executor-core/pom.xml @@ -16,5 +16,11 @@ 17 UTF-8 + + + xyz.thoughtset.viewer + viewer-common-crud-core + + \ No newline at end of file diff --git a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/AbstractExecutor.java b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/AbstractExecutor.java index 20b1f1f..5be09b0 100644 --- a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/AbstractExecutor.java +++ b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/AbstractExecutor.java @@ -1,9 +1,10 @@ package xyz.thoughtset.viewer.executor.core.base; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Getter; +import org.springframework.beans.factory.annotation.Autowired; import xyz.thoughtset.viewer.executor.core.entity.QueryBody; import xyz.thoughtset.viewer.executor.core.factory.ExecutorRegistry; -import xyz.thoughtset.viewer.executor.core.service.QueryBodyService; import java.util.Map; @@ -12,6 +13,10 @@ public abstract class AbstractExecutor { protected final String supportType; @Getter protected final boolean innerExecutor; + @Autowired + protected ObjectMapper objectMapper; + + protected AbstractExecutor(String supportType, boolean innerExecutor){ this.supportType = supportType; this.innerExecutor = innerExecutor; diff --git a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/entity/QueryBody.java b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/entity/QueryBody.java index 6453cd1..2b10d1e 100644 --- a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/entity/QueryBody.java +++ b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/entity/QueryBody.java @@ -20,6 +20,7 @@ public class QueryBody extends BaseMeta { protected String dsId; @TableField(condition = SqlCondition.LIKE) protected String query; +// protected String type; @TableField(exist = false) private List params; diff --git a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/factory/ExecutorRegistry.java b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/factory/ExecutorRegistry.java index 6d21f8e..024cc12 100644 --- a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/factory/ExecutorRegistry.java +++ b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/factory/ExecutorRegistry.java @@ -12,13 +12,13 @@ import java.util.concurrent.ConcurrentHashMap; public class ExecutorRegistry { private static AbstractExecutor DEFAULT = null; private static final ConcurrentHashMap Executor_Map = new ConcurrentHashMap<>(); - @Getter - private static final LinkedHashSet Executor_Keys = new LinkedHashSet<>(); +// @Getter +// private static final LinkedHashSet Executor_Keys = new LinkedHashSet<>(); public static void register(AbstractExecutor executor) { if (DEFAULT==null) DEFAULT = executor; Executor_Map.put(executor.getSupportType(), executor); - Executor_Keys.add(executor.getSupportType()); +// Executor_Keys.add(executor.getSupportType()); } public static AbstractExecutor findExecutor(String supportType){ diff --git a/executor/viewer-executor-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/executor/viewer-executor-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 54d7e55..0000000 --- a/executor/viewer-executor-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -xyz.thoughtset.viewer.executor.mybatis.MybatisExecutorAutoConfiguration \ No newline at end of file diff --git a/modules/viewer-modules-ds/pom.xml b/modules/viewer-modules-ds/pom.xml index e001f9c..102c6b9 100644 --- a/modules/viewer-modules-ds/pom.xml +++ b/modules/viewer-modules-ds/pom.xml @@ -14,6 +14,8 @@ viewer-modules-ds-core viewer-modules-ds-jdbc + viewer-modules-ds-http + viewer-modules-ds-command diff --git a/executor/viewer-executor-mybatis/pom.xml b/modules/viewer-modules-ds/viewer-modules-ds-command/pom.xml similarity index 82% rename from executor/viewer-executor-mybatis/pom.xml rename to modules/viewer-modules-ds/viewer-modules-ds-command/pom.xml index 556a6f1..ae79c6b 100644 --- a/executor/viewer-executor-mybatis/pom.xml +++ b/modules/viewer-modules-ds/viewer-modules-ds-command/pom.xml @@ -5,11 +5,11 @@ 4.0.0 xyz.thoughtset.viewer - executor + viewer-modules-ds ${revision} - viewer-executor-mybatis + viewer-modules-ds-command 17 @@ -20,7 +20,7 @@ xyz.thoughtset.viewer - viewer-executor-core + viewer-modules-ds-core diff --git a/executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/MybatisExecutorAutoConfiguration.java b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/DsCmdAutoConfiguration.java similarity index 73% rename from executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/MybatisExecutorAutoConfiguration.java rename to modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/DsCmdAutoConfiguration.java index a172206..1d67bb3 100644 --- a/executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/MybatisExecutorAutoConfiguration.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/DsCmdAutoConfiguration.java @@ -1,4 +1,4 @@ -package xyz.thoughtset.viewer.executor.mybatis; +package xyz.thoughtset.viewer.modules.ds.command; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.ComponentScan; @@ -7,5 +7,5 @@ import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan @EnableConfigurationProperties -public class MybatisExecutorAutoConfiguration { -} \ No newline at end of file +public class DsCmdAutoConfiguration { +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/executor/CommandExecutor.java b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/executor/CommandExecutor.java new file mode 100644 index 0000000..0de68df --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/java/xyz/thoughtset/viewer/modules/ds/command/executor/CommandExecutor.java @@ -0,0 +1,41 @@ +package xyz.thoughtset.viewer.modules.ds.command.executor; + +import lombok.SneakyThrows; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.parsing.XNode; +import org.apache.ibatis.parsing.XPathParser; +import org.apache.ibatis.reflection.ParamNameResolver; +import org.apache.ibatis.scripting.xmltags.XMLScriptBuilder; +import org.apache.ibatis.session.Configuration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import xyz.thoughtset.viewer.executor.core.base.AbstractExecutor; +import xyz.thoughtset.viewer.executor.core.entity.QueryBody; +import xyz.thoughtset.viewer.modules.ds.core.factory.ConnectFactory; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class CommandExecutor extends AbstractExecutor { + @Autowired + protected ConnectFactory connectFactory; + public CommandExecutor() { + super(null, true); + } + private final Configuration configuration = new Configuration(); + private final String head_xml = ""; + private final String tail_xml = ""; + + @Override + protected Object exec(QueryBody queryBody, Map param) { + return null; +// return doQuery(queryBody.getQuery(),param, connectFactory.buildConnect(queryBody.getDsId(), BaseReq.class)); + } + + + + +} diff --git a/executor/viewer-executor-mybatis/src/main/resources/META-INF/spring.factories b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/resources/META-INF/spring.factories similarity index 62% rename from executor/viewer-executor-mybatis/src/main/resources/META-INF/spring.factories rename to modules/viewer-modules-ds/viewer-modules-ds-command/src/main/resources/META-INF/spring.factories index eb37a7b..d7d832d 100644 --- a/executor/viewer-executor-mybatis/src/main/resources/META-INF/spring.factories +++ b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=xyz.thoughtset.viewer.executor.mybatis \ No newline at end of file +org.springframework.boot.autoconfigure.EnableAutoConfiguration=xyz.thoughtset.viewer.modules.ds.command \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..8921063 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-command/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +xyz.thoughtset.viewer.modules.ds.command.DsCmdAutoConfiguration \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-core/pom.xml b/modules/viewer-modules-ds/viewer-modules-ds-core/pom.xml index 4109b15..c93e585 100644 --- a/modules/viewer-modules-ds/viewer-modules-ds-core/pom.xml +++ b/modules/viewer-modules-ds/viewer-modules-ds-core/pom.xml @@ -17,4 +17,12 @@ UTF-8 + + + + xyz.thoughtset.viewer + viewer-executor-core + + + \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ConnectFactory.java b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ConnectFactory.java index 72cc300..fc0e855 100644 --- a/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ConnectFactory.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ConnectFactory.java @@ -29,6 +29,9 @@ public class ConnectFactory { private DsConfigDao dsConfigDao; private ConcurrentHashMap DS_CACHE = new ConcurrentHashMap<>(); + public T buildConnect(String dsId,Class targetType) { + return (T) buildConnect(dsId); + } public Object buildConnect(String dsId) { Object result = DS_CACHE.get(dsId); @@ -54,7 +57,7 @@ public class ConnectFactory { return result; } - private ConnBuilder findConnBuilder(DsConfig ds){ + public ConnBuilder findConnBuilder(DsConfig ds){ ConnBuilder connBuilder = LinkerHelper.getConnBuilder(ds); if (Objects.nonNull(connBuilder)){ return connBuilder; diff --git a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/factory/ExecutorManager.java b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ExecutorManager.java similarity index 71% rename from executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/factory/ExecutorManager.java rename to modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ExecutorManager.java index 66348bb..6ba51d0 100644 --- a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/factory/ExecutorManager.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ExecutorManager.java @@ -1,15 +1,22 @@ -package xyz.thoughtset.viewer.executor.core.factory; +package xyz.thoughtset.viewer.modules.ds.core.factory; import cn.hutool.core.convert.Convert; import lombok.Getter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; +import xyz.thoughtset.viewer.common.connector.linker.ConnBuilder; +import xyz.thoughtset.viewer.common.connector.linker.LinkerBuilder; +import xyz.thoughtset.viewer.common.connector.linker.LinkerHelper; import xyz.thoughtset.viewer.executor.core.base.AbstractExecutor; import xyz.thoughtset.viewer.executor.core.base.DataContext; import xyz.thoughtset.viewer.executor.core.constants.TypeConstants; import xyz.thoughtset.viewer.executor.core.entity.QueryBody; import xyz.thoughtset.viewer.executor.core.entity.QueryParam; +import xyz.thoughtset.viewer.executor.core.factory.ExecutorRegistry; import xyz.thoughtset.viewer.executor.core.service.QueryBodyService; +import xyz.thoughtset.viewer.modules.ds.core.dao.DsConfigDao; +import xyz.thoughtset.viewer.modules.ds.core.entity.DsConfig; import java.util.HashMap; import java.util.LinkedHashSet; @@ -23,6 +30,10 @@ import java.util.stream.Collectors; public class ExecutorManager { @Autowired private QueryBodyService queryBodyService; + @Autowired + private DsConfigDao dsConfigDao; + @Autowired + private ConnectFactory connectFactory; public Object execute(String bodyId, Map tmpParam){ QueryBody queryBody = queryBodyService.getById(bodyId); @@ -41,7 +52,9 @@ public class ExecutorManager { paramsMap.put(queryParam.getTitle(), Convert.convert(TypeConstants.TYPE_MAP.get(queryParam.getDataType()),value)); } - AbstractExecutor executor = ExecutorRegistry.findExecutor(queryBody.getDsId()); + DsConfig dsConfig = dsConfigDao.selectById(queryBody.getDsId()); + ConnBuilder connBuilder = connectFactory.findConnBuilder(dsConfig); + AbstractExecutor executor = ExecutorRegistry.findExecutor(connBuilder.getDataLinker().getLinkerType()); return executor.execute(queryBody,paramsMap); } diff --git a/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/service/LinkerConfigServiceImpl.java b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/service/LinkerConfigServiceImpl.java index ce1a599..50e2c24 100644 --- a/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/service/LinkerConfigServiceImpl.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/service/LinkerConfigServiceImpl.java @@ -10,7 +10,7 @@ import xyz.thoughtset.viewer.modules.ds.core.entity.LinkerConfig; import java.util.LinkedHashMap; import java.util.Objects; -@Service("linkerConfigService") +@Service @Transactional public class LinkerConfigServiceImpl extends BaseServiceImpl implements LinkerConfigService{ diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/pom.xml b/modules/viewer-modules-ds/viewer-modules-ds-http/pom.xml new file mode 100644 index 0000000..642e3a0 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + xyz.thoughtset.viewer + viewer-modules-ds + ${revision} + + + viewer-modules-ds-http + pom + + viewer-modules-ds-http-core + viewer-modules-ds-http-simple + + + + 17 + 17 + UTF-8 + + + + + xyz.thoughtset.viewer + viewer-modules-ds-core + + + + \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/pom.xml b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/pom.xml new file mode 100644 index 0000000..3919da3 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + xyz.thoughtset.viewer + viewer-modules-ds-http + ${revision} + + + viewer-modules-ds-http-core + + + 17 + 17 + UTF-8 + + + + \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/DsHttpCoreAutoConfiguration.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/DsHttpCoreAutoConfiguration.java new file mode 100644 index 0000000..c66dd5f --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/DsHttpCoreAutoConfiguration.java @@ -0,0 +1,11 @@ +package xyz.thoughtset.viewer.modules.ds.http.core; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +@EnableConfigurationProperties +public class DsHttpCoreAutoConfiguration { +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/RequireAttrConstant.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/RequireAttrConstant.java new file mode 100644 index 0000000..aad2dde --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/RequireAttrConstant.java @@ -0,0 +1,8 @@ +package xyz.thoughtset.viewer.modules.ds.http.core.constant; + +public class RequireAttrConstant { + public static final String USE_FORMAT_URL = "formatUrl"; + public static final Boolean USE_FORMAT_URL_DEFAULT = Boolean.TRUE; + + public static final String USE_FORMAT_BODY = "formatBody"; +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/SupportTypeConstant.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/SupportTypeConstant.java new file mode 100644 index 0000000..7dbc3bd --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/constant/SupportTypeConstant.java @@ -0,0 +1,5 @@ +package xyz.thoughtset.viewer.modules.ds.http.core.constant; + +public class SupportTypeConstant { + public static final String SUPPORT_TYPE = "HTTP"; +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/enums/OkHttp3BuilderEnum.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/enums/OkHttp3BuilderEnum.java new file mode 100644 index 0000000..b109c7d --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/enums/OkHttp3BuilderEnum.java @@ -0,0 +1,58 @@ +package xyz.thoughtset.viewer.modules.ds.http.core.enums; + +import lombok.Getter; + +import java.util.Map; + +public enum OkHttp3BuilderEnum { + MAX_IDLE_CONNECTIONS("maxIdleConnections"), + KEEP_ALIVE_DURATION("keepAliveDuration"), + PROXY_HOST("proxyHost"), + PROXY_PORT("proxyPort"), + PROXY_TYPE("proxyType","HTTP"), + CONNECT_TIMEOUT("connectTimeout"), + READ_TIMEOUT("readTimeout"), + WRITE_TIMEOUT("writeTimeout"), + ENABLE_VERIFY_SSL("verifySSL","true"); + + @Getter + private final String title; + private final String defaultValue; + private final boolean autoLoad; + + OkHttp3BuilderEnum(String title) { + this(title,null); + } + OkHttp3BuilderEnum(String title,String defaultValue) { + this(title,null,false); + } + OkHttp3BuilderEnum(String title,String defaultValue,boolean autoLoad) { + this.title = title; + this.defaultValue = defaultValue; + this.autoLoad = autoLoad; + } + + public static Object getVal(Map map, OkHttp3BuilderEnum builderEnum) { + Object value = map.get(builderEnum.title); + if (value == null) { + value = builderEnum.defaultValue; + } + return value; + } + + public static String getStrVal(Map map, OkHttp3BuilderEnum builderEnum) { + return (String) getVal(map, builderEnum); + } + + public static Integer getIntVal(Map map, OkHttp3BuilderEnum builderEnum) { + Object value = getVal(map, builderEnum); + return value == null ? null : value instanceof Integer? (Integer) value :Integer.valueOf((String)value); + } + + public static Long getLongVal(Map map, OkHttp3BuilderEnum builderEnum) { + Object value = getVal(map, builderEnum); + return value == null ? null : value instanceof Long? (Long) value :Long.valueOf((String)value); + } + + +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/executor/HttpReqExecutor.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/executor/HttpReqExecutor.java new file mode 100644 index 0000000..aa6a35b --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/executor/HttpReqExecutor.java @@ -0,0 +1,85 @@ +package xyz.thoughtset.viewer.modules.ds.http.core.executor; + +import lombok.SneakyThrows; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.parsing.XNode; +import org.apache.ibatis.parsing.XPathParser; +import org.apache.ibatis.reflection.ParamNameResolver; +import org.apache.ibatis.scripting.xmltags.XMLScriptBuilder; +import org.apache.ibatis.session.Configuration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.util.UriComponentsBuilder; +import xyz.thoughtset.viewer.executor.core.base.AbstractExecutor; +import xyz.thoughtset.viewer.executor.core.entity.QueryBody; +import xyz.thoughtset.viewer.modules.ds.core.factory.ConnectFactory; +import xyz.thoughtset.viewer.modules.ds.http.core.constant.RequireAttrConstant; +import xyz.thoughtset.viewer.modules.ds.http.core.constant.SupportTypeConstant; +import xyz.thoughtset.viewer.modules.ds.http.core.req.BaseReq; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class HttpReqExecutor extends AbstractExecutor { + @Autowired + protected ConnectFactory connectFactory; + public HttpReqExecutor() { + super(SupportTypeConstant.SUPPORT_TYPE, true); + } + private final Configuration configuration = new Configuration(); + private final String head_xml = ""; + private final String tail_xml = ""; + + @Override + protected Object exec(QueryBody queryBody, Map param) { + return doQuery(queryBody.getQuery(),param, connectFactory.buildConnect(queryBody.getDsId(), BaseReq.class)); + } + + + @SneakyThrows + public Object doQuery(String sqlText, Object param, BaseReq baseReq) { + sqlText = sqlText.trim().replaceAll("&", "&"); + //todo:优化点直接使用DocumentBuilderFactory进行创建 + XPathParser parser = new XPathParser(head_xml+sqlText+tail_xml); + XNode rootNode = parser.evalNode("/root"); + XNode xNode = rootNode.evalNode("http|get|post"); + XNode payloadNode = rootNode.evalNode("/payload"); + Boolean useFormatUrl = xNode.getBooleanAttribute(RequireAttrConstant.USE_FORMAT_URL, RequireAttrConstant.USE_FORMAT_URL_DEFAULT); + //#{ + XMLScriptBuilder builder = new XMLScriptBuilder(configuration, xNode, null); + SqlSource sqlSource = builder.parseScriptNode(); + Object parameterObject = ParamNameResolver.wrapToMapIfCollection(param, null); + BoundSql boundSql = sqlSource.getBoundSql(parameterObject); + String reqUrl = boundSql.getSql().trim() + .replaceAll("\\s*","") + .replace("?&","?"); + if (reqUrl.endsWith("?")){ + reqUrl = reqUrl.substring(reqUrl.length()-1,reqUrl.length()); + } + String payload = null; + if (payloadNode!=null){ + payload = new XMLScriptBuilder(configuration, payloadNode, null) + .parseScriptNode().getBoundSql(parameterObject).getSql().trim() + .replaceAll("\\s*",""); + } + String resultJson = null; + switch (xNode.getName().toLowerCase()){ + case "post": + resultJson = baseReq.doPost(reqUrl, useFormatUrl, payload); + break; + case "get": + default: + resultJson = baseReq.doGet(reqUrl, useFormatUrl); + } +// List result = new ArrayList(); +// result.add(StringUtils.hasText(resultJson) ? objectMapper.readValue(resultJson, Map.class) : new HashMap<>()); + return StringUtils.hasText(resultJson) ? objectMapper.readValue(resultJson, Map.class) : new HashMap<>(); + } + + + + +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/linker/HttpConnBuilder.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/linker/HttpConnBuilder.java new file mode 100644 index 0000000..2344325 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/linker/HttpConnBuilder.java @@ -0,0 +1,129 @@ +package xyz.thoughtset.viewer.modules.ds.http.core.linker; + + +import lombok.SneakyThrows; +import okhttp3.ConnectionPool; +import okhttp3.OkHttpClient; +import xyz.thoughtset.viewer.common.connector.entity.bo.ConnectorMeta; +import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; +import xyz.thoughtset.viewer.common.connector.linker.ConnBuilder; +import xyz.thoughtset.viewer.modules.ds.http.core.enums.OkHttp3BuilderEnum; +import xyz.thoughtset.viewer.modules.ds.http.core.req.SyncHttpReq; + +import javax.net.ssl.*; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.security.KeyStore; +import java.security.SecureRandom; +import java.security.cert.X509Certificate; +import java.util.Objects; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +public abstract class HttpConnBuilder extends ConnBuilder { + private static final Properties EMPTY_PROP = new Properties(); + + public HttpConnBuilder(Linker dataLinker) { + super(dataLinker); + } + + @SneakyThrows + @Override + public Object buildConnect(ConnectorMeta connectorMeta, Properties properties){ + if (properties == null) { + properties = EMPTY_PROP; + } + Object connections = properties.get(OkHttp3BuilderEnum.MAX_IDLE_CONNECTIONS.getTitle()); + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + if (Objects.nonNull(connections)){ + if (connections instanceof String){ + connections = Integer.parseInt((String) connections); + } + if(((Integer) connections) < 3){ + connections = 3; + } + Object keepAliveDuration = properties.get(OkHttp3BuilderEnum.KEEP_ALIVE_DURATION.getTitle()); + if(Objects.isNull(keepAliveDuration)){ + keepAliveDuration = 5L; + }else { + if (keepAliveDuration instanceof String){ + keepAliveDuration = Long.parseLong((String) keepAliveDuration); + } + } + if(((Long) keepAliveDuration) < 2L){ + connections = 2L; + } + builder.connectionPool( + new ConnectionPool( + (Integer) connections, + (Long) keepAliveDuration, + TimeUnit.MINUTES)); + } + if (!Boolean.valueOf(OkHttp3BuilderEnum.getStrVal(properties, OkHttp3BuilderEnum.ENABLE_VERIFY_SSL))) { + builder.hostnameVerifier((hostname, session) -> true); + X509TrustManager myTrustManager = new X509TrustManager() { + @Override + public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { + + } + @Override + public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { + } + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + }; + SSLContext sslCtx = SSLContext.getInstance("TLS"); + sslCtx.init(null, new TrustManager[] { myTrustManager }, new SecureRandom()); + builder.sslSocketFactory(sslCtx.getSocketFactory(),myTrustManager); + } + Integer connectTimeout = OkHttp3BuilderEnum.getIntVal(properties, OkHttp3BuilderEnum.CONNECT_TIMEOUT); + Integer readTimeout = OkHttp3BuilderEnum.getIntVal(properties, OkHttp3BuilderEnum.READ_TIMEOUT); + Integer writeTimeout = OkHttp3BuilderEnum.getIntVal(properties, OkHttp3BuilderEnum.WRITE_TIMEOUT); + if (connectTimeout != null && connectTimeout > 0) { + builder.connectTimeout(connectTimeout, TimeUnit.SECONDS); + } + if (readTimeout != null && readTimeout > 0) { + builder.readTimeout(readTimeout, TimeUnit.SECONDS); + } + if (writeTimeout != null && writeTimeout > 0 && writeTimeout < 60 * 1000 * 10L + && writeTimeout > readTimeout + 5L) { + builder.writeTimeout(writeTimeout, TimeUnit.SECONDS); + } + String proxyHost = OkHttp3BuilderEnum.getStrVal(properties, OkHttp3BuilderEnum.PROXY_HOST); + Integer proxyPort = OkHttp3BuilderEnum.getIntVal(properties, OkHttp3BuilderEnum.PROXY_PORT); + if (proxyHost != null && !proxyHost.isEmpty() && proxyPort != null) { + if (proxyPort < 1 || proxyPort > 65535) { + throw new IllegalArgumentException("Invalid proxy port: " + proxyPort); + } + if (proxyHost.length() > 255) { + throw new IllegalArgumentException("Invalid proxy host: " + proxyHost); + } + if (proxyHost.contains(":")) { + throw new IllegalArgumentException("Invalid proxy host: " + proxyHost); + } + Proxy.Type type = Proxy.Type.HTTP; + if (OkHttp3BuilderEnum.getStrVal(properties, OkHttp3BuilderEnum.PROXY_TYPE).equalsIgnoreCase("SOCKS")) { + type = Proxy.Type.SOCKS; + } + Proxy proxy = new Proxy(type, new InetSocketAddress(proxyHost, proxyPort)); + builder.proxy(proxy); + } + + return new SyncHttpReq(true,connectorMeta.getUrl(),builder.build()); + } + + +// private Authenticator getProxyAuthenticator(String username, String password) { +// return (route, response) -> { +// String credential = okhttp3.Credentials.basic(username, password); +// return response.request().newBuilder() +// .header("Proxy-Authorization", credential) +// .build(); +// }; +// } + + protected abstract OkHttpClient.Builder addInterceptor(OkHttpClient.Builder builder, ConnectorMeta connectorMeta, Properties properties); + +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/BaseReq.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/BaseReq.java new file mode 100644 index 0000000..04f253a --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/BaseReq.java @@ -0,0 +1,58 @@ +package xyz.thoughtset.viewer.modules.ds.http.core.req; + +import lombok.AllArgsConstructor; +import lombok.Data; +import okhttp3.OkHttpClient; +import org.springframework.web.util.UriComponentsBuilder; + +@Data +@AllArgsConstructor +public abstract class BaseReq { + protected boolean wasHttp; + protected String baseUrl; + protected OkHttpClient okHttpClient; + + protected String buildUrl(String url,boolean formatUrl) { + String fullUrl; + if (url == null) { + if (baseUrl != null) { + fullUrl = baseUrl; + } else { + throw new NullPointerException("在设置 BaseUrl 之前,您必须指定具体路径才能发起请求!"); + } + } else { + url = url.trim(); + boolean isFullPath = url.startsWith("https://") + || url.startsWith("http://") + || url.startsWith("wss://") + || url.startsWith("ws://"); + if (isFullPath) { + fullUrl = url; + } else if (baseUrl != null) { + fullUrl = baseUrl + url; + } else { + throw new NullPointerException("在设置 BaseUrl 之前,您必须使用全路径URL发起请求,当前URL为:'" + url + "'"); + } + } + if (wasHttp && fullUrl.startsWith("http")) { + fullUrl = fullUrl.replaceFirst("http", "ws"); + } + if (!wasHttp && fullUrl.startsWith("ws")) { + fullUrl = fullUrl.replaceFirst("ws", "http"); + } + + + if (formatUrl) { + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(fullUrl); + return uriBuilder.toUriString(); + } else { + return fullUrl; + } + + } + + + public abstract String doGet(String url,boolean formatUrl); + public abstract String doPost(String url,boolean formatUrl,String jsonStr); + +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/SyncHttpReq.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/SyncHttpReq.java new file mode 100644 index 0000000..b91a396 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/java/xyz/thoughtset/viewer/modules/ds/http/core/req/SyncHttpReq.java @@ -0,0 +1,58 @@ +package xyz.thoughtset.viewer.modules.ds.http.core.req; + +import lombok.SneakyThrows; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import org.springframework.http.MediaType; + +import java.io.IOException; + + + +public class SyncHttpReq extends BaseReq{ + + public SyncHttpReq(boolean wasHttp, String baseUrl, OkHttpClient okHttpClient) { + super(wasHttp, baseUrl, okHttpClient); + } + + + @Override + public String doGet(String url,boolean formatUrl) { + Request request = new Request.Builder() + .url(buildUrl(url,formatUrl)) + .get() + .build(); + return exeReq(request); + } + + @Override + public String doPost(String url,boolean formatUrl,String jsonStr) { + RequestBody body = null; + if (jsonStr != null) { + body = RequestBody.create( + jsonStr, + okhttp3.MediaType.parse(MediaType.APPLICATION_JSON_VALUE) + ); + } + Request request = new Request.Builder() + .url(buildUrl(url,formatUrl)) + .post(body) // 这里可以添加请求体 + .build(); + return exeReq(request); + } + + @SneakyThrows + private String exeReq(Request request){ + try (Response response = okHttpClient.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new IOException("Unexpected code " + response); + } + // 解析响应 + return response.body().string(); + } + } + + +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring.factories b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..f02c75c --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=xyz.thoughtset.viewer.modules.ds.http.core \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..a252273 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +xyz.thoughtset.viewer.modules.ds.http.core.DsHttpCoreAutoConfiguration \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/pom.xml b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/pom.xml new file mode 100644 index 0000000..cb7cfbd --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + xyz.thoughtset.viewer + viewer-modules-ds-http + ${revision} + + + viewer-modules-ds-http-simple + + + 17 + 17 + UTF-8 + + + + + + xyz.thoughtset.viewer + viewer-modules-ds-http-core + + + + \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/DsHttpSimpleAutoConfiguration.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/DsHttpSimpleAutoConfiguration.java new file mode 100644 index 0000000..c58585a --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/DsHttpSimpleAutoConfiguration.java @@ -0,0 +1,11 @@ +package xyz.thoughtset.viewer.modules.ds.http.simple; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +@EnableConfigurationProperties +public class DsHttpSimpleAutoConfiguration { +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/interceptor/SelfInterceptorLoad.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/interceptor/SelfInterceptorLoad.java new file mode 100644 index 0000000..b43e4c6 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/interceptor/SelfInterceptorLoad.java @@ -0,0 +1,10 @@ +package xyz.thoughtset.viewer.modules.ds.http.simple.interceptor; + +import okhttp3.Interceptor; + +import java.util.List; +import java.util.Properties; + +public interface SelfInterceptorLoad { + List buildInterceptors(String baseUrl, String ak, String sk, Properties properties); +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqBuilder.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqBuilder.java new file mode 100644 index 0000000..a6ee05e --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqBuilder.java @@ -0,0 +1,45 @@ +package xyz.thoughtset.viewer.modules.ds.http.simple.linker; + + +import lombok.SneakyThrows; +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import xyz.thoughtset.viewer.common.connector.entity.bo.ConnectorMeta; +import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; +import xyz.thoughtset.viewer.common.core.constants.FolderNameConstant; +import xyz.thoughtset.viewer.modules.ds.http.core.linker.HttpConnBuilder; +import xyz.thoughtset.viewer.modules.ds.http.simple.interceptor.SelfInterceptorLoad; + +import java.net.URL; +import java.net.URLClassLoader; +import java.util.List; +import java.util.Properties; + +//@Component +public class ManualHttpReqBuilder extends HttpConnBuilder { + public ManualHttpReqBuilder(Linker dataLinker) { + super(dataLinker); + } + + @SneakyThrows + @Override + protected OkHttpClient.Builder addInterceptor(OkHttpClient.Builder builder, + ConnectorMeta connectorMeta, Properties properties) { + URLClassLoader urlClassLoader = new URLClassLoader( + new URL[]{new URL(FolderNameConstant.jarFileAllPath(dataLinker.getJarFilePath()))}, + Thread.currentThread().getContextClassLoader()); + Class clazz = urlClassLoader.loadClass(dataLinker.getDriverClassName()); + SelfInterceptorLoad interceptor = (SelfInterceptorLoad) clazz.newInstance(); + List interceptors = interceptor.buildInterceptors( + connectorMeta.getUrl(), + connectorMeta.getAk(), + connectorMeta.getSk(), + properties); + if (interceptors != null && !interceptors.isEmpty()) { + for (Interceptor interceptorEle : interceptors) { + builder.addInterceptor(interceptorEle); + } + } + return builder; + } +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqLinkerBuilder.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqLinkerBuilder.java new file mode 100644 index 0000000..0a436fa --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/ManualHttpReqLinkerBuilder.java @@ -0,0 +1,24 @@ +package xyz.thoughtset.viewer.modules.ds.http.simple.linker; + + +import lombok.Getter; +import org.springframework.stereotype.Component; +import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; +import xyz.thoughtset.viewer.common.connector.linker.ConnBuilder; +import xyz.thoughtset.viewer.common.connector.linker.LinkerBuilder; +import xyz.thoughtset.viewer.modules.ds.http.core.constant.SupportTypeConstant; + +@Component +@Getter +public class ManualHttpReqLinkerBuilder extends LinkerBuilder { + public ManualHttpReqLinkerBuilder() { + super(SupportTypeConstant.SUPPORT_TYPE); + } + + @Override + public ConnBuilder buildConnBuilder(Linker linker) { + return new ManualHttpReqBuilder(linker); + } + + +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/SimpleHttpReqBuilder.java b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/SimpleHttpReqBuilder.java new file mode 100644 index 0000000..e82edea --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/java/xyz/thoughtset/viewer/modules/ds/http/simple/linker/SimpleHttpReqBuilder.java @@ -0,0 +1,28 @@ +package xyz.thoughtset.viewer.modules.ds.http.simple.linker; + + +import okhttp3.OkHttpClient; +import org.springframework.stereotype.Component; +import xyz.thoughtset.viewer.common.connector.entity.bo.ConnectorMeta; +import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; +import xyz.thoughtset.viewer.modules.ds.http.core.linker.HttpConnBuilder; +import xyz.thoughtset.viewer.modules.ds.http.core.constant.SupportTypeConstant; + +import java.util.Properties; + +@Component +public class SimpleHttpReqBuilder extends HttpConnBuilder { + public SimpleHttpReqBuilder() { + super(new Linker( + "SimpleHttpReq", + null, + SupportTypeConstant.SUPPORT_TYPE + )); + } + + + @Override + protected OkHttpClient.Builder addInterceptor(OkHttpClient.Builder builder, ConnectorMeta connectorMeta, Properties properties) { + return builder; + } +} diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring.factories b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..677f87d --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=xyz.thoughtset.viewer.modules.ds.http.simple \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..d44179a --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-http/viewer-modules-ds-http-simple/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +xyz.thoughtset.viewer.modules.ds.http.simple.DsHttpSimpleAutoConfiguration \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/pom.xml b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/pom.xml index 4309ebe..19e6921 100644 --- a/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/pom.xml +++ b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/pom.xml @@ -17,4 +17,5 @@ UTF-8 + \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/constant/SupportTypeConstant.java b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/constant/SupportTypeConstant.java new file mode 100644 index 0000000..5098ec1 --- /dev/null +++ b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/constant/SupportTypeConstant.java @@ -0,0 +1,6 @@ +package xyz.thoughtset.viewer.modules.ds.jdbc.core.constant; + +public class SupportTypeConstant { + public static final String SUPPORT_TYPE = "jdbc"; + public static final String MYSQL = "mysql"; +} diff --git a/executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/factory/MybatisTypeQueryExecutor.java b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/factory/MybatisSqlQueryExecutor.java similarity index 90% rename from executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/factory/MybatisTypeQueryExecutor.java rename to modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/factory/MybatisSqlQueryExecutor.java index 63109da..2b6fed4 100644 --- a/executor/viewer-executor-mybatis/src/main/java/xyz/thoughtset/viewer/executor/mybatis/factory/MybatisTypeQueryExecutor.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-core/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/core/factory/MybatisSqlQueryExecutor.java @@ -1,4 +1,4 @@ -package xyz.thoughtset.viewer.executor.mybatis.factory; +package xyz.thoughtset.viewer.modules.ds.jdbc.core.factory; import lombok.SneakyThrows; import org.apache.ibatis.mapping.BoundSql; @@ -15,13 +15,11 @@ import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeException; import org.apache.ibatis.type.TypeHandler; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import xyz.thoughtset.viewer.executor.core.base.AbstractExecutor; -import xyz.thoughtset.viewer.executor.core.base.DataContext; import xyz.thoughtset.viewer.executor.core.entity.QueryBody; -import xyz.thoughtset.viewer.executor.core.service.QueryBodyService; -import xyz.thoughtset.viewer.modules.ds.core.service.DsConfigService; +import xyz.thoughtset.viewer.modules.ds.core.factory.ConnectFactory; +import xyz.thoughtset.viewer.modules.ds.jdbc.core.constant.SupportTypeConstant; import javax.sql.DataSource; import java.sql.*; @@ -31,21 +29,20 @@ import java.util.List; import java.util.Map; @Component -public class MybatisTypeQueryExecutor extends AbstractExecutor { +public class MybatisSqlQueryExecutor extends AbstractExecutor { + @Autowired + protected ConnectFactory connectFactory; - public MybatisTypeQueryExecutor() { - super("MybatisType", true); -// this.dsConfigService = dsConfigService; + public MybatisSqlQueryExecutor() { + super(SupportTypeConstant.SUPPORT_TYPE, true); } private final Configuration configuration = new Configuration(); - @Autowired - private DsConfigService dsConfigService; @Override protected Object exec(QueryBody queryBody, Map param) { - return doQuery(queryBody.getQuery(),param,dsConfigService.buildDataSource(queryBody.getDsId())); + return doQuery(queryBody.getQuery(),param, connectFactory.buildConnect(queryBody.getDsId(),DataSource.class)); } @@ -76,6 +73,8 @@ public class MybatisTypeQueryExecutor extends AbstractExecutor { } list.add(resultMap); } + }catch (Exception e){ + e.printStackTrace(); } // org.apache.ibatis.executor.SimpleExecutor // Executor executor = new SimpleExecutor(); diff --git a/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-mysql/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/mysql/config/MysqlDsConfig.java b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-mysql/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/mysql/config/MysqlDsConfig.java index 26d2cbb..ee9e3d5 100644 --- a/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-mysql/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/mysql/config/MysqlDsConfig.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-mysql/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/mysql/config/MysqlDsConfig.java @@ -3,6 +3,8 @@ package xyz.thoughtset.viewer.modules.ds.jdbc.mysql.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; +import xyz.thoughtset.viewer.modules.ds.jdbc.core.constant.SupportTypeConstant; +import xyz.thoughtset.viewer.modules.ds.jdbc.core.factory.MybatisSqlQueryExecutor; import xyz.thoughtset.viewer.modules.ds.jdbc.core.linker.JdbcConnBuilder; @Configuration @@ -12,7 +14,8 @@ public class MysqlDsConfig { public JdbcConnBuilder mysqlConnBuilder() { Linker dataLinker = new Linker( "mysql", - "com.mysql.cj.jdbc.Driver" + "com.mysql.cj.jdbc.Driver", + SupportTypeConstant.SUPPORT_TYPE ); return new JdbcConnBuilder(dataLinker); } diff --git a/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-self/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/self/linker/ManualJdbcLinkerBuilder.java b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-self/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/self/linker/ManualJdbcLinkerBuilder.java index eafe572..e578230 100644 --- a/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-self/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/self/linker/ManualJdbcLinkerBuilder.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-jdbc/viewer-modules-ds-jdbc-self/src/main/java/xyz/thoughtset/viewer/modules/ds/jdbc/self/linker/ManualJdbcLinkerBuilder.java @@ -7,12 +7,14 @@ import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; import xyz.thoughtset.viewer.common.connector.linker.ConnBuilder; import xyz.thoughtset.viewer.common.connector.linker.LinkerBuilder; import xyz.thoughtset.viewer.common.connector.linker.LinkerHelper; +import xyz.thoughtset.viewer.modules.ds.jdbc.core.constant.SupportTypeConstant; +import xyz.thoughtset.viewer.modules.ds.jdbc.core.factory.MybatisSqlQueryExecutor; @Component @Getter public class ManualJdbcLinkerBuilder extends LinkerBuilder { public ManualJdbcLinkerBuilder() { - super("jdbc"); + super(SupportTypeConstant.SUPPORT_TYPE); } @Override diff --git a/modules/viewer-modules-step/pom.xml b/modules/viewer-modules-step/pom.xml index 6817d32..c4872b0 100644 --- a/modules/viewer-modules-step/pom.xml +++ b/modules/viewer-modules-step/pom.xml @@ -26,10 +26,6 @@ - - xyz.thoughtset.viewer - viewer-executor-mybatis - \ No newline at end of file diff --git a/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java b/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java index 5f1638c..0ef8748 100644 --- a/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java +++ b/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java @@ -7,15 +7,12 @@ import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; -import xyz.thoughtset.viewer.executor.core.factory.ExecutorManager; +import xyz.thoughtset.viewer.modules.ds.core.factory.ExecutorManager; import xyz.thoughtset.viewer.modules.step.entity.BlockParam; import xyz.thoughtset.viewer.modules.step.entity.QueryBlock; import xyz.thoughtset.viewer.modules.step.service.QueryBlockService; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; @Component public class SimpleBlockExecutor { @@ -32,10 +29,19 @@ public class SimpleBlockExecutor { List blocks = queryBlockService.listByPId(apiId); for (QueryBlock block : blocks) { Object queryResult = blockQuery(block,contentMap); + String key = block.getTitle(); + Object val = queryResult; if (block.resultWasSingle() && !ObjectUtils.isEmpty(queryResult)){ - queryResult = ((List)queryResult).get(0); + if (val instanceof List){ + val = ((List)queryResult).get(0); + } + }else{ + if (!(val instanceof Collection)){ + val = new ArrayList<>(); + ((ArrayList) val).add(queryResult); + } } - contentMap.put(block.getTitle(),queryResult); + contentMap.put(key,val); } return contentMap; @@ -67,7 +73,7 @@ public class SimpleBlockExecutor { // return simpleQueryExecutor.doQuery(queryBody.getQuery(),tmpParamsMap,queryBody.getDsId()); // } - private List blockQuery(QueryBlock block,Map contentMap){ + private Object blockQuery(QueryBlock block,Map contentMap){ Map tmpParamsMap = new HashMap(); List blockParams = queryBlockService.blockParams(block.getId()); if (Objects.nonNull(blockParams)){ @@ -84,7 +90,7 @@ public class SimpleBlockExecutor { tmpParamsMap.put(blockParam.getQpId(),value); } } - return (List) executorManager.execute(block.getBodyId(),tmpParamsMap); + return executorManager.execute(block.getBodyId(),tmpParamsMap); } diff --git a/pom.xml b/pom.xml index 63ba05d..9067546 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,7 @@ 33.1.0-jre 1.76 1.1.0 + 4.11.0 @@ -124,6 +125,12 @@ bcprov-jdk18on ${bouncycastle.version} + + + com.squareup.okhttp3 + okhttp + ${okhttp3.version} + @@ -215,10 +222,14 @@ viewer-common-envvar ${revision} - xyz.thoughtset.viewer - viewer-executor-mybatis + viewer-modules-ds-http-core + ${revision} + + + xyz.thoughtset.viewer + viewer-modules-ds-http-simple ${revision} -- Gitee