优化sql轮询部分测试用例及命名

This commit is contained in:
houxinyu
2023-09-22 23:03:36 +08:00
parent e93a8179cd
commit 4adbd1a532
14 changed files with 33 additions and 263 deletions

View File

@@ -68,7 +68,7 @@ public class SQLXmlELParser extends ClassXmlFlowELParser {
try{
JDBCHelper jdbcHelper = JDBCHelper.getInstance();
String content = jdbcHelper.getContent();
if(sqlParserVO.getIfPolling()) {
if(sqlParserVO.getPollingEnabled()) {
FlowInitHook.addHook(() -> {
jdbcHelper.listenSQL();
return true;

View File

@@ -76,7 +76,7 @@ public class JDBCHelper {
}
INSTANCE.setSqlParserVO(sqlParserVO);
//创建定时任务线程池
if (sqlParserVO.getIfPolling() && ObjectUtil.isNull(getPollExecutor())) {
if (sqlParserVO.getPollingEnabled() && ObjectUtil.isNull(getPollExecutor())) {
ThreadFactory namedThreadFactory = new NamedThreadFactory("SQL-Polling-", false);
ScheduledThreadPoolExecutor threadPoolExecutor = new ScheduledThreadPoolExecutor(
CORE_POOL_SIZE,
@@ -137,7 +137,7 @@ public class JDBCHelper {
result.add(StrUtil.format(CHAIN_XML_PATTERN, XmlUtil.escape(chainName), elData));
//如果需要轮询 计算该chainData的SHA值
if(sqlParserVO.getIfPolling()){
if(sqlParserVO.getPollingEnabled()){
String chainSHA = DigestUtil.sha1Hex(elData);
chainSHAMap.put(chainName, chainSHA);
}
@@ -167,13 +167,13 @@ public class JDBCHelper {
public void listenSQL() {
//添加轮询chain的定时任务
ChainPollingTask chainTask = new ChainPollingTask(sqlParserVO, chainSHAMap);
pollExecutor.scheduleAtFixedRate(chainTask, sqlParserVO.getPollingStartTime().longValue(),
sqlParserVO.getPollingInterval().longValue(), TimeUnit.SECONDS);
pollExecutor.scheduleAtFixedRate(chainTask, sqlParserVO.getPollingStartSeconds().longValue(),
sqlParserVO.getPollingIntervalSeconds().longValue(), TimeUnit.SECONDS);
if (hasScriptData()) {
//添加轮询script的定时任务
ScriptPollingTask scriptTask = new ScriptPollingTask(sqlParserVO, scriptSHAMap);
pollExecutor.scheduleAtFixedRate(scriptTask, sqlParserVO.getPollingStartTime().longValue(),
sqlParserVO.getPollingInterval().longValue(), TimeUnit.SECONDS);
pollExecutor.scheduleAtFixedRate(scriptTask, sqlParserVO.getPollingStartSeconds().longValue(),
sqlParserVO.getPollingIntervalSeconds().longValue(), TimeUnit.SECONDS);
}
}
@@ -232,7 +232,7 @@ public class JDBCHelper {
result.add(StrUtil.format(NODE_ITEM_XML_PATTERN, XmlUtil.escape(id), XmlUtil.escape(name), type, data));
//如果需要轮询 计算该scriptData的SHA值
if(sqlParserVO.getIfPolling()){
if(sqlParserVO.getPollingEnabled()){
String scriptKey = StrUtil.join(":", id, type, name);
String scriptSHA = DigestUtil.sha1Hex(data);
scriptSHAMap.put(scriptKey, scriptSHA);
@@ -306,7 +306,7 @@ public class JDBCHelper {
type, language, data));
//如果需要轮询 计算该scriptData的SHA值
if(sqlParserVO.getIfPolling()){
if(sqlParserVO.getPollingEnabled()){
String scriptKey = StrUtil.join(":", id, type, name, language);
String scriptSHA = DigestUtil.sha1Hex(data);
scriptSHAMap.put(scriptKey, scriptSHA);

View File

@@ -91,13 +91,13 @@ public class SQLParserVO {
private String scriptLanguageField;
/*轮询机制是否开启 默认不开启*/
private Boolean ifPolling = false;
private Boolean pollingEnabled = false;
/*轮询时间间隔(s) 默认120s*/
private Integer pollingInterval = 120;
private Integer pollingIntervalSeconds = 120;
/*规则配置后首次轮询的起始时间 默认为60s*/
private Integer pollingStartTime = 60;
private Integer pollingStartSeconds = 60;
public String getUrl() {
return url;
@@ -234,27 +234,27 @@ public class SQLParserVO {
return StrUtil.isBlank(url) && StrUtil.isBlank(username) && StrUtil.isBlank(password) && StrUtil.isBlank(driverClassName);
}
public Boolean getIfPolling() {
return ifPolling;
public Boolean getPollingEnabled() {
return pollingEnabled;
}
public void setIfPolling(Boolean ifPolling) {
this.ifPolling = ifPolling;
public void setPollingEnabled(Boolean pollingEnabled) {
this.pollingEnabled = pollingEnabled;
}
public Integer getPollingInterval() {
return pollingInterval;
public Integer getPollingIntervalSeconds() {
return pollingIntervalSeconds;
}
public void setPollingInterval(Integer pollingInterval) {
this.pollingInterval = pollingInterval;
public void setPollingIntervalSeconds(Integer pollingIntervalSeconds) {
this.pollingIntervalSeconds = pollingIntervalSeconds;
}
public Integer getPollingStartTime() {
return pollingStartTime;
public Integer getPollingStartSeconds() {
return pollingStartSeconds;
}
public void setPollingStartTime(Integer pollingStartTime) {
this.pollingStartTime = pollingStartTime;
public void setPollingStartSeconds(Integer pollingStartSeconds) {
this.pollingStartSeconds = pollingStartSeconds;
}
}

View File

@@ -1,33 +0,0 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

View File

@@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>liteflow-testcase-el</artifactId>
<groupId>com.yomahub</groupId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liteflow-testcase-el-sql-springboot-polling</artifactId>
<properties>
<h2.version>2.1.214</h2.version>
<jpa.version>2.6.8</jpa.version>
</properties>
<dependencies>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-spring-boot-starter</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-rule-sql</artifactId>
<version>${revision}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${jpa.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-script-groovy</artifactId>
<version>${revision}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-script-graaljs</artifactId>
<version>${revision}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@@ -1,27 +0,0 @@
package com.yomahub.liteflow.test;
import com.yomahub.liteflow.core.FlowInitHook;
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.jupiter.api.AfterAll;
/**
* @author hxinyu
* @since 2.11.1
*/
public class BaseTest {
@AfterAll
public static void cleanScanCache() {
ComponentScanner.cleanCache();
FlowBus.cleanCache();
ExecutorHelper.loadInstance().clearExecutorServiceMap();
SpiFactoryCleaner.clean();
LiteflowConfigGetter.clean();
FlowInitHook.cleanHook();
}
}

View File

@@ -1,22 +0,0 @@
/**
* <p>Title: liteflow</p>
* <p>Description: 轻量级的组件式流程框架</p>
*
* @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!");
}
}

View File

@@ -1,22 +0,0 @@
/**
* <p>Title: liteflow</p>
* <p>Description: 轻量级的组件式流程框架</p>
*
* @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!");
}
}

View File

@@ -1,22 +0,0 @@
/**
* <p>Title: liteflow</p>
* <p>Description: 轻量级的组件式流程框架</p>
*
* @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!");
}
}

View File

@@ -1,14 +0,0 @@
DELETE FROM EL_TABLE;
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain1','THEN(a, b, c);');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain2','IF(x1, THEN(a, b));');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain3','IF(x0, THEN(a, b));');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','<chain3>','IF(x0, THEN(a, b));');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain4','IF(x2, IF(x0, THEN(a, b)));');
DELETE FROM SCRIPT_NODE_TABLE;
INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x0','if 脚本','if_script','return true','groovy');
INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x1','if 脚本','if_script','return true','groovy');
INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x2','python脚本','if_script','return true','js');

View File

@@ -1,20 +0,0 @@
create table IF NOT EXISTS `EL_TABLE`
(
`id` bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
`application_name` varchar(32) NOT NULL,
`chain_name` varchar(32) NOT NULL,
`el_data` varchar(1024) NOT NULL,
PRIMARY KEY (`id`)
);
create table IF NOT EXISTS `script_node_table`
(
`id` bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
`application_name` varchar(32) NOT NULL,
`script_node_id` varchar(32) NOT NULL,
`script_node_name` varchar(32) NOT NULL,
`script_node_type` varchar(32) NOT NULL,
`script_node_data` varchar(1024) NOT NULL,
`script_language` varchar(1024) NOT NULL,
PRIMARY KEY (`id`)
);

View File

@@ -1,8 +1,6 @@
package com.yomahub.liteflow.test.sql;
import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.core.FlowInitHook;
import com.yomahub.liteflow.flow.FlowBus;
import com.yomahub.liteflow.flow.LiteflowResponse;
import com.yomahub.liteflow.log.LFLog;
import com.yomahub.liteflow.log.LFLoggerManager;
@@ -12,10 +10,7 @@ import com.yomahub.liteflow.parser.sql.vo.SQLParserVO;
import com.yomahub.liteflow.property.LiteflowConfig;
import com.yomahub.liteflow.property.LiteflowConfigGetter;
import com.yomahub.liteflow.slot.DefaultContext;
import com.yomahub.liteflow.spi.holder.SpiFactoryCleaner;
import com.yomahub.liteflow.spring.ComponentScanner;
import com.yomahub.liteflow.test.BaseTest;
import com.yomahub.liteflow.thread.ExecutorHelper;
import com.yomahub.liteflow.util.JsonUtil;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
@@ -29,7 +24,10 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.ScheduledThreadPoolExecutor;
/**

View File

@@ -15,9 +15,9 @@ liteflow.rule-source-ext-data={\
"scriptDataField":"script_node_data",\
"scriptLanguageField":"script_language",\
"scriptTypeField":"script_node_type",\
"ifPolling":true,\
"pollingInterval":2,\
"pollingStartTime":2\
"pollingEnabled":true,\
"pollingIntervalSeconds":2,\
"pollingStartSeconds":2\
}
spring.datasource.driver-class-name=org.h2.Driver

View File

@@ -1,7 +1,7 @@
DELETE FROM EL_TABLE;
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain1','THEN(a, b, c);');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain2','THEN(a, b, c);');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain2','IF(x1, THEN(a, b));');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain3','IF(x0, THEN(a, b));');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','<chain3>','IF(x0, THEN(a, b));');
INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain4','IF(x2, IF(x0, THEN(a, b)));');
@@ -9,6 +9,6 @@ INSERT INTO EL_TABLE (APPLICATION_NAME,CHAIN_NAME,EL_DATA) values ('demo','chain
DELETE FROM SCRIPT_NODE_TABLE;
INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x0','if 脚本','if_script','return true','groovy');
INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x1','if 脚本','if_script','return false','groovy');
INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x1','if 脚本','if_script','return true','groovy');
INSERT INTO SCRIPT_NODE_TABLE (APPLICATION_NAME,SCRIPT_NODE_ID,SCRIPT_NODE_NAME,SCRIPT_NODE_TYPE,SCRIPT_NODE_DATA,SCRIPT_LANGUAGE) values ('demo','x2','python脚本','if_script','return true','js');