From cbc4df5809aa72c24d17a504cc4843e3793fb1ad Mon Sep 17 00:00:00 2001 From: tangkc <1016771049@qq.com> Date: Sun, 18 Sep 2022 22:08:46 +0800 Subject: [PATCH] =?UTF-8?q?feature=20#I5ROOR=20=E5=A2=9E=E5=8A=A0=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E5=9E=8B=E6=95=B0=E6=8D=AE=E5=BA=93EL=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow-rule-sql/pom.xml | 23 +++ .../parser/spi/sql/SQLParserClassNameSpi.java | 19 +++ .../liteflow/parser/sql/SQLXmlELParser.java | 84 ++++++++++ .../parser/sql/exception/ELSQLException.java | 30 ++++ .../liteflow/parser/sql/util/JDBCHelper.java | 157 ++++++++++++++++++ .../liteflow/parser/sql/vo/SQLParserVO.java | 116 +++++++++++++ ...hub.liteflow.parser.spi.ParserClassNameSpi | 1 + liteflow-rule-plugin/pom.xml | 1 + .../pom.xml | 70 ++++++++ .../com/yomahub/liteflow/test/BaseTest.java | 23 +++ .../test/sql/SQLWithXmlELSpringbootTest.java | 35 ++++ .../yomahub/liteflow/test/sql/cmp/ACmp.java | 20 +++ .../yomahub/liteflow/test/sql/cmp/BCmp.java | 21 +++ .../yomahub/liteflow/test/sql/cmp/CCmp.java | 21 +++ .../test/resources/application-xml.properties | 9 + .../src/test/resources/sql/data.sql | 4 + .../src/test/resources/sql/schema.sql | 6 + liteflow-testcase-el/pom.xml | 1 + 18 files changed, 641 insertions(+) create mode 100644 liteflow-rule-plugin/liteflow-rule-sql/pom.xml create mode 100644 liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/spi/sql/SQLParserClassNameSpi.java create mode 100644 liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/SQLXmlELParser.java create mode 100644 liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/exception/ELSQLException.java create mode 100644 liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java create mode 100644 liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java create mode 100644 liteflow-rule-plugin/liteflow-rule-sql/src/main/resources/META-INF/services/com.yomahub.liteflow.parser.spi.ParserClassNameSpi create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/ACmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/BCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/CCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql create mode 100644 liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql diff --git a/liteflow-rule-plugin/liteflow-rule-sql/pom.xml b/liteflow-rule-plugin/liteflow-rule-sql/pom.xml new file mode 100644 index 00000000..af48a726 --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-sql/pom.xml @@ -0,0 +1,23 @@ + + + + liteflow + com.yomahub + ${revision} + ../../pom.xml + + 4.0.0 + + liteflow-rule-sql + + + + com.yomahub + liteflow-core + ${revision} + true + + + \ No newline at end of file diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/spi/sql/SQLParserClassNameSpi.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/spi/sql/SQLParserClassNameSpi.java new file mode 100644 index 00000000..19017fcc --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/spi/sql/SQLParserClassNameSpi.java @@ -0,0 +1,19 @@ +package com.yomahub.liteflow.parser.spi.sql; + +import com.yomahub.liteflow.parser.spi.ParserClassNameSpi; +import com.yomahub.liteflow.parser.sql.SQLXmlELParser; + +/** + * SQL 解析器 SPI 实现 + * + * @author tangkc + * @since 2.9.0 + */ +public class SQLParserClassNameSpi implements ParserClassNameSpi { + + @Override + public String getSpiClassName() { + return SQLXmlELParser.class.getName(); + } + +} \ No newline at end of file diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/SQLXmlELParser.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/SQLXmlELParser.java new file mode 100644 index 00000000..87ea0976 --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/SQLXmlELParser.java @@ -0,0 +1,84 @@ +package com.yomahub.liteflow.parser.sql; + +import cn.hutool.core.text.StrFormatter; +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.parser.el.ClassXmlFlowELParser; +import com.yomahub.liteflow.parser.sql.exception.ELSQLException; +import com.yomahub.liteflow.parser.sql.util.JDBCHelper; +import com.yomahub.liteflow.parser.sql.vo.SQLParserVO; +import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.util.JsonUtil; + +import java.util.Objects; + +/** + * SQL 解析器实现,只支持 EL 形式的 XML,不支持其他的形式 + * + * @author tangkc + * @since 2.9.0 + */ +public class SQLXmlELParser extends ClassXmlFlowELParser { + + private static final String ERROR_MSG_PATTERN = "rule-source-ext-data {} is blank"; + private static final String ERROR_COMMON_MSG = "rule-source-ext-data is empty"; + + /** + * 构造函数 + */ + public SQLXmlELParser() { + LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); + + if (StrUtil.isBlank(liteflowConfig.getRuleSourceExtData())) { + throw new ELSQLException(ERROR_COMMON_MSG); + } + + try { + SQLParserVO sqlParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), SQLParserVO.class); + if (Objects.isNull(sqlParserVO)) { + throw new ELSQLException(ERROR_COMMON_MSG); + } + + // 检查配置文件 + checkParserVO(sqlParserVO); + + // 初始化 JDBCHelper + JDBCHelper.init(sqlParserVO); + + } catch (ELSQLException elsqlException) { + throw elsqlException; + } catch (Exception ex) { + throw new ELSQLException(ex.getMessage()); + } + + } + + @Override + public String parseCustom() { + return JDBCHelper.getInstance().getElDataContent(); + } + + + /** + * 检查配置文件并设置默认值 + * + * @param sqlParserVO sqlParserVO + */ + private void checkParserVO(SQLParserVO sqlParserVO) { + if (StrUtil.isEmpty(sqlParserVO.getUrl())) { + throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "url")); + } + if (StrUtil.isEmpty(sqlParserVO.getDriverClassName())) { + throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "driverClassName")); + } + if (Objects.isNull(sqlParserVO.getUsername())) { + throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "username")); + } + if (Objects.isNull(sqlParserVO.getPassword())) { + throw new ELSQLException(StrFormatter.format(ERROR_MSG_PATTERN, "password")); + } + if (Objects.isNull(sqlParserVO.getElTable())) { + sqlParserVO.setElTable(new SQLParserVO.ElTable()); + } + } +} diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/exception/ELSQLException.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/exception/ELSQLException.java new file mode 100644 index 00000000..e0a4a24a --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/exception/ELSQLException.java @@ -0,0 +1,30 @@ +package com.yomahub.liteflow.parser.sql.exception; + +/** + * SQL 相关业务异常 + * + * @author tangkc + * @since 2.9.0 + */ +public class ELSQLException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** + * 异常信息 + */ + private String message; + + public ELSQLException(String message) { + this.message = message; + } + + @Override + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java new file mode 100644 index 00000000..c529b542 --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java @@ -0,0 +1,157 @@ +package com.yomahub.liteflow.parser.sql.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.StrFormatter; +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.parser.sql.exception.ELSQLException; +import com.yomahub.liteflow.parser.sql.vo.SQLParserVO; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * jdbc 工具类 + * + * @author tangkc + * @since 2.9.0 + */ +public class JDBCHelper { + + private static final String SQL_PATTERN = "SELECT {},{} FROM {} "; + + private static final String CHAIN_XML_PATTERN = "{}"; + private static final String XML_PATTERN = "{}"; + private static final Integer FETCH_SIZE_MAX = 1000; + + private SQLParserVO sqlParserVO; + + private static JDBCHelper INSTANCE; + + /** + * 初始化 INSTANCE + */ + public static void init(SQLParserVO sqlParserVO) { + try { + INSTANCE = new JDBCHelper(); + Class.forName(sqlParserVO.getDriverClassName()); + INSTANCE.setSqlParserVO(sqlParserVO); + } catch (ClassNotFoundException e) { + throw new ELSQLException(e.getMessage()); + } + } + + /** + * 获取 INSTANCE + */ + public static JDBCHelper getInstance() { + return INSTANCE; + } + + /** + * 获取链接 + */ + public Connection getConn() { + Connection connection = null; + try { + connection = DriverManager.getConnection(sqlParserVO.getUrl(), sqlParserVO.getUsername(), sqlParserVO.getPassword()); + } catch (SQLException e) { + throw new ELSQLException(e.getMessage()); + } + return connection; + } + + /** + * 获取 ElData 数据内容 + */ + public String getElDataContent() { + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + + String elDataField = sqlParserVO.getElTable().getElDataField(); + String chainNameField = sqlParserVO.getElTable().getChainNameField(); + String tableName = sqlParserVO.getElTable().getTableName(); + String sqlCmd = StrFormatter.format(SQL_PATTERN, chainNameField, elDataField, tableName); + + List result = new ArrayList<>(); + try { + conn = getConn(); + stmt = conn.prepareStatement(sqlCmd, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); + // 设置游标拉取数量 + stmt.setFetchSize(FETCH_SIZE_MAX); + rs = stmt.executeQuery(); + + while (rs.next()) { + String elData = rs.getString(elDataField); + if (StrUtil.isBlank(elData)) { + throw new ELSQLException(StrFormatter.format("{} table exist {} field value is empty", tableName, elDataField)); + } + String chainName = rs.getString(chainNameField); + if (StrUtil.isBlank(elData)) { + throw new ELSQLException(StrFormatter.format("{} table exist {} field value is empty", tableName, elDataField)); + } + + result.add(StrFormatter.format(CHAIN_XML_PATTERN, chainName, elData)); + } + } catch (Exception e) { + throw new ELSQLException(e.getMessage()); + } finally { + // 关闭连接 + close(conn, stmt, rs); + } + + String chains = CollUtil.join(result, StrUtil.CRLF); + return StrFormatter.format(XML_PATTERN, chains); + } + + /** + * 关闭连接 + * + * @param conn conn + * @param stmt stmt + * @param rs rs + */ + private void close(Connection conn, PreparedStatement stmt, ResultSet rs) { + // 关闭连接 + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + throw new ELSQLException(e.getMessage()); + } + } + // 关闭 statement + if (stmt != null) { + try { + stmt.close(); + } catch (SQLException e) { + throw new ELSQLException(e.getMessage()); + } + } + //关闭结果集 + if (rs != null) { + try { + rs.close(); + } catch (SQLException e) { + throw new ELSQLException(e.getMessage()); + } + } + } + + + //#region get set method + private SQLParserVO getSqlParserVO() { + return sqlParserVO; + } + + private JDBCHelper setSqlParserVO(SQLParserVO sqlParserVO) { + this.sqlParserVO = sqlParserVO; + return this; + } + //#endregion +} diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java new file mode 100644 index 00000000..6eb9f9c6 --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java @@ -0,0 +1,116 @@ +package com.yomahub.liteflow.parser.sql.vo; + +/** + * 用于解析 RuleSourceExtData 的 VO 类,用于 sql 模式中 + * + * @author tangkc + * @since 2.9.0 + */ +public class SQLParserVO { + + /** + * 连接地址 + */ + private String url; + + /** + * 驱动 + */ + private String driverClassName; + + /** + * 账号名 + */ + private String username; + + /** + * 密码 + */ + private String password; + + /** + * EL 表相关配置 + */ + private ElTable elTable; + + public static class ElTable { + /** + * 表名 + */ + private String tableName = "el_table"; + + /** + * chainName + */ + private String chainNameField = "chain_name"; + + /** + * el 表达式相关数据 + */ + private String elDataField = "el_data"; + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getChainNameField() { + return chainNameField; + } + + public void setChainNameField(String chainNameField) { + this.chainNameField = chainNameField; + } + + public String getElDataField() { + return elDataField; + } + + public void setElDataField(String elDataField) { + this.elDataField = elDataField; + } + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getDriverClassName() { + return driverClassName; + } + + public void setDriverClassName(String driverClassName) { + this.driverClassName = driverClassName; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public ElTable getElTable() { + return elTable; + } + + public void setElTable(ElTable elTable) { + this.elTable = elTable; + } +} diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/resources/META-INF/services/com.yomahub.liteflow.parser.spi.ParserClassNameSpi b/liteflow-rule-plugin/liteflow-rule-sql/src/main/resources/META-INF/services/com.yomahub.liteflow.parser.spi.ParserClassNameSpi new file mode 100644 index 00000000..4a0937b2 --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/resources/META-INF/services/com.yomahub.liteflow.parser.spi.ParserClassNameSpi @@ -0,0 +1 @@ +com.yomahub.liteflow.parser.spi.sql.SQLParserClassNameSpi \ No newline at end of file diff --git a/liteflow-rule-plugin/pom.xml b/liteflow-rule-plugin/pom.xml index 4e1601b4..9599dbec 100644 --- a/liteflow-rule-plugin/pom.xml +++ b/liteflow-rule-plugin/pom.xml @@ -12,6 +12,7 @@ pom liteflow-rule-zk + liteflow-rule-sql liteflow-rule-plugin diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml new file mode 100644 index 00000000..b1bfc69d --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/pom.xml @@ -0,0 +1,70 @@ + + + + liteflow-testcase-el + com.yomahub + ${revision} + ../pom.xml + + 4.0.0 + + liteflow-testcase-el-sql-springboot + + + 2.1.214 + + + + + com.yomahub + liteflow-spring-boot-starter + ${revision} + + + + com.yomahub + liteflow-rule-sql + ${revision} + test + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework.boot + spring-boot-starter-data-jpa + 2.0.5.RELEASE + test + + + + com.h2database + h2 + ${h2.version} + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${springboot.version} + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + true + + + + + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java new file mode 100644 index 00000000..7d8cef60 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -0,0 +1,23 @@ +package com.yomahub.liteflow.test; + +import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.spi.holder.SpiFactoryCleaner; +import com.yomahub.liteflow.spring.ComponentScanner; +import com.yomahub.liteflow.thread.ExecutorHelper; +import org.junit.AfterClass; + +/** + * @author tangkc + * @since 2.8.6 + */ +public class BaseTest { + @AfterClass + public static void cleanScanCache(){ + ComponentScanner.cleanCache(); + FlowBus.cleanCache(); + ExecutorHelper.loadInstance().clearExecutorServiceMap(); + SpiFactoryCleaner.clean(); + LiteflowConfigGetter.clean(); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java new file mode 100644 index 00000000..34ceb68a --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/SQLWithXmlELSpringbootTest.java @@ -0,0 +1,35 @@ +package com.yomahub.liteflow.test.sql; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * @author tangkc + * @since 2.9.0 + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/application-xml.properties") +@SpringBootTest(classes = SQLWithXmlELSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.sql.cmp"}) +public class SQLWithXmlELSpringbootTest extends BaseTest { + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testSQLWithXml() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertEquals("a==>b==>c", response.getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/ACmp.java new file mode 100644 index 00000000..4b7958ec --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/ACmp.java @@ -0,0 +1,20 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.sql.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("a") +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/BCmp.java new file mode 100644 index 00000000..5d71a230 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/BCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.sql.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("b") +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/CCmp.java new file mode 100644 index 00000000..8bce5991 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/sql/cmp/CCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.sql.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("c") +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties new file mode 100644 index 00000000..8565f159 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-xml.properties @@ -0,0 +1,9 @@ +liteflow.rule-source-ext-data={"url":"jdbc:h2:mem:test_db;MODE=MySQL","driverClassName":"org.h2.Driver","username":"root","password":"123456","elTable":{"tableName":"EL_TABLE","elDataField":"EL_DATA"}} + +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:test_db;MODE=MySQL +spring.datasource.username=root +spring.datasource.password=123456 +spring.datasource.schema=classpath:/sql/schema.sql +spring.datasource.data=classpath:/sql/data.sql +spring.datasource.platform=h2 \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql new file mode 100644 index 00000000..4a8db084 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/data.sql @@ -0,0 +1,4 @@ +DELETE FROM EL_TABLE; + +INSERT INTO EL_TABLE (CHAIN_NAME,EL_DATA) values ('chain1','THEN(a, b, c);'); +INSERT INTO EL_TABLE (CHAIN_NAME,EL_DATA) values ('chain2','THEN(a, b, c);'); \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql new file mode 100644 index 00000000..38a82c58 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/sql/schema.sql @@ -0,0 +1,6 @@ +create table `EL_TABLE` ( + `id` bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + `chain_name` varchar(32) NOT NULL, + `el_data` varchar(1024) NOT NULL, + PRIMARY KEY (`id`) +) ; \ No newline at end of file diff --git a/liteflow-testcase-el/pom.xml b/liteflow-testcase-el/pom.xml index ee768dbc..c3133976 100644 --- a/liteflow-testcase-el/pom.xml +++ b/liteflow-testcase-el/pom.xml @@ -23,5 +23,6 @@ liteflow-testcase-el-script-groovy-springboot liteflow-testcase-el-script-qlexpress-springboot liteflow-testcase-el-zk-springboot + liteflow-testcase-el-sql-springboot \ No newline at end of file