瀏覽代碼

feature #IASS9Z 新的java脚本插件,支持java8~java17的所有语法特性

everywhere.z 7 月之前
父節點
當前提交
9334b1e846
共有 25 個文件被更改,包括 621 次插入14 次删除
  1. 83 0
      liteflow-benchmark/.gitignore
  2. 23 0
      liteflow-benchmark/liteflow-benchmark-script-javax/pom.xml
  3. 76 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/ScriptJavaxBenchmark.java
  4. 20 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/ACmp.java
  5. 20 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/BCmp.java
  6. 20 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/CCmp.java
  7. 23 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/DCmp.java
  8. 28 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/Person.java
  9. 25 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/TestDomain.java
  10. 72 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/test/ScriptJavaxTest.java
  11. 3 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/resources/application.properties
  12. 75 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/resources/flow.xml
  13. 35 0
      liteflow-benchmark/liteflow-benchmark-script-javax/src/test/resources/javaxScript.java
  14. 61 0
      liteflow-benchmark/pom.xml
  15. 8 3
      liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java
  16. 5 1
      liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/BooleanScriptBody.java
  17. 5 0
      liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/CommonScriptBody.java
  18. 5 1
      liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/ForScriptBody.java
  19. 5 0
      liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/ScriptBody.java
  20. 5 1
      liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/SwitchScriptBody.java
  21. 13 4
      liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/JavaxExecutor.java
  22. 6 1
      liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/vo/JavaxSettingMapKey.java
  23. 1 1
      liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  24. 2 1
      liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/common/application.properties
  25. 2 1
      pom.xml

+ 83 - 0
liteflow-benchmark/.gitignore

@@ -0,0 +1,83 @@
+# Compiled source #
+###################
+*.com
+*.class
+*.dll
+*.exe
+*.o
+*.so
+
+
+# Packages #
+############
+# it's better to unpack these files and commit the raw source
+# git has its own built in compression methods
+*.7z
+*.dmg
+*.gz
+*.iso
+*.jar
+*.rar
+*.tar
+*.zip
+*.war
+*.del
+*.pmd
+.tern-project
+
+
+# Logs and databases #
+######################
+*.log
+*.log.*
+# OS generated files #
+######################
+.DS_Store*
+ehthumbs.db
+Icon?
+Thumbs.db
+
+
+# Editor Files #
+################
+*~
+*.swp
+
+
+# Gradle Files #
+################
+.gradle
+
+
+# Build output directies
+/target
+*/target
+/build
+*/build
+
+
+# IntelliJ specific files/directories
+out
+.idea
+*.ipr
+*.iws
+*.iml
+atlassian-ide-plugin.xml
+
+
+# Eclipse specific files/directories
+.classpath
+.project
+.settings
+.metadata
+.myeclipse
+
+
+# NetBeans specific files/directories
+.nbattrs
+
+*.mymetadata
+/logs
+*/logs
+
+.flattened-pom.xml

+ 23 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/pom.xml

@@ -0,0 +1,23 @@
+<?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-benchmark</artifactId>
+        <groupId>com.yomahub</groupId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>liteflow-benchmark-script-javax</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yomahub</groupId>
+            <artifactId>liteflow-script-javax</artifactId>
+            <version>${revision}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>

+ 76 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/ScriptJavaxBenchmark.java

@@ -0,0 +1,76 @@
+package com.yomahub.liteflow.benchmark;
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import com.yomahub.liteflow.builder.LiteFlowNodeBuilder;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.FlowBus;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+import org.openjdk.jmh.runner.options.TimeValue;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.PropertySource;
+
+import java.util.concurrent.TimeUnit;
+
+@State(Scope.Benchmark)
+@EnableAutoConfiguration
+@PropertySource(value = "classpath:application.properties")
+@ComponentScan("com.yomahub.liteflow.benchmark.cmp")
+public class ScriptJavaxBenchmark {
+
+    private ConfigurableApplicationContext applicationContext;
+
+    private FlowExecutor flowExecutor;
+
+    @Setup
+    public void setup() {
+        applicationContext = SpringApplication.run(ScriptJavaxBenchmark.class);
+        flowExecutor = applicationContext.getBean(FlowExecutor.class);
+    }
+
+    @TearDown
+    public void tearDown() {
+        applicationContext.close();
+    }
+
+    /*@Benchmark
+    public  void test1(){
+        flowExecutor.execute2Resp("chain1");
+    }*/
+
+    //每次编译一样的的script性能
+    @Benchmark
+    public  void test2(){
+        String scriptContent = ResourceUtil.readUtf8Str("classpath:javaxScript.java");
+        LiteFlowNodeBuilder.createScriptNode().setId("ds").setScript(scriptContent).build();
+
+        if(!FlowBus.containChain("chain2")){
+            LiteFlowChainELBuilder.createChain().setChainId("chain2").setEL("THEN(ds)").build();
+        }
+        flowExecutor.execute2Resp("chain2");
+    }
+
+
+    public static void main(String[] args) throws RunnerException {
+        Options opt = new OptionsBuilder()
+                .include(ScriptJavaxBenchmark.class.getSimpleName())
+                .mode(Mode.Throughput)
+                .warmupIterations(1)//预热次数
+                .measurementIterations(3)//执行次数
+                .measurementTime(new TimeValue(30, TimeUnit.SECONDS))//每次执行多少时间
+                .threads(300)//多少个线程
+                .forks(1)//多少个进程
+                .timeUnit(TimeUnit.SECONDS)
+                .build();
+        new Runner(opt).run();
+    }
+}

+ 20 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/ACmp.java

@@ -0,0 +1,20 @@
+/**
+ * <p>Title: liteflow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.benchmark.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+@LiteflowComponent("a")
+public class ACmp extends NodeComponent {
+
+	@Override
+	public void process() {
+	}
+
+}

+ 20 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/BCmp.java

@@ -0,0 +1,20 @@
+/**
+ * <p>Title: liteflow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.benchmark.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+@LiteflowComponent("b")
+public class BCmp extends NodeComponent {
+
+	@Override
+	public void process() {
+	}
+
+}

+ 20 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/CCmp.java

@@ -0,0 +1,20 @@
+/**
+ * <p>Title: liteflow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.benchmark.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+
+@LiteflowComponent("c")
+public class CCmp extends NodeComponent {
+
+	@Override
+	public void process() {
+	}
+
+}

+ 23 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/DCmp.java

@@ -0,0 +1,23 @@
+/**
+ * <p>Title: liteflow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.benchmark.cmp;
+
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.slot.DefaultContext;
+
+@LiteflowComponent("d")
+public class DCmp extends NodeComponent {
+
+	@Override
+	public void process() {
+		DefaultContext context = this.getFirstContextBean();
+		context.setData("count", 198);
+	}
+
+}

+ 28 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/Person.java

@@ -0,0 +1,28 @@
+package com.yomahub.liteflow.benchmark.cmp;
+
+public class Person {
+    private String name;
+
+    private Integer salary;
+
+    public Person(String name, Integer salary) {
+        this.name = name;
+        this.salary = salary;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getSalary() {
+        return salary;
+    }
+
+    public void setSalary(Integer salary) {
+        this.salary = salary;
+    }
+}

+ 25 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/benchmark/cmp/TestDomain.java

@@ -0,0 +1,25 @@
+package com.yomahub.liteflow.benchmark.cmp;
+
+import cn.hutool.core.collection.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class TestDomain {
+
+    public String sayHello(String name){
+        return "hello," + name;
+    }
+
+    public static void main(String[] args) {
+        List<Person> personList = ListUtil.toList(
+                new Person("jack", 15000),
+                new Person("tom", 13500),
+                new Person("peter", 18600)
+                );
+
+        int totalSalary = personList.stream().mapToInt(Person::getSalary).sum();
+        System.out.println(totalSalary);
+    }
+}

+ 72 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/java/com/yomahub/liteflow/test/ScriptJavaxTest.java

@@ -0,0 +1,72 @@
+package com.yomahub.liteflow.test;
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import com.yomahub.liteflow.builder.LiteFlowNodeBuilder;
+import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.flow.LiteflowResponse;
+import com.yomahub.liteflow.slot.DefaultContext;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+import org.openjdk.jmh.runner.options.TimeValue;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import javax.annotation.Resource;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+
+@ExtendWith(SpringExtension.class)
+@TestPropertySource(value = "classpath:application.properties")
+@SpringBootTest(classes = ScriptJavaxTest.class)
+@EnableAutoConfiguration
+@ComponentScan({ "com.yomahub.liteflow.benchmark.cmp" })
+public class ScriptJavaxTest {
+
+    @Resource
+    private FlowExecutor flowExecutor;
+
+    // 测试普通脚本节点
+    @Test
+    public void test1() {
+        ExecutorService executorService = new ThreadPoolExecutor(100, 100, 60,
+                TimeUnit.SECONDS, new ArrayBlockingQueue<>(500), new ThreadFactory() {
+            private final AtomicLong number = new AtomicLong();
+
+            @Override
+            public Thread newThread(Runnable r) {
+                Thread newThread = Executors.defaultThreadFactory().newThread(r);
+                newThread.setName("LF" + number.getAndIncrement());
+                newThread.setDaemon(false);
+                return newThread;
+            }
+        }, new ThreadPoolExecutor.CallerRunsPolicy());
+
+        for (int i = 0; i < 10000; i++) {
+            executorService.submit(() -> {
+                String scriptContent = ResourceUtil.readUtf8Str("classpath:javaxScript.java");
+                LiteFlowNodeBuilder.createScriptNode().setId("ds").setScript(scriptContent).build();
+
+                if(!FlowBus.containChain("chain2")){
+                    LiteFlowChainELBuilder.createChain().setChainId("chain2").setEL("THEN(ds)").build();
+                }
+                LiteflowResponse response = flowExecutor.execute2Resp("chain2");
+                DefaultContext context = response.getFirstContextBean();
+                System.out.println(context.getData("salary").toString());
+            });
+        }
+    }
+}

+ 3 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/resources/application.properties

@@ -0,0 +1,3 @@
+liteflow.rule-source=flow.xml
+liteflow.print-execution-log=true
+liteflow.script-setting.javax-is-cache=false

+ 75 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/resources/flow.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE flow PUBLIC  "liteflow" "liteflow.dtd">
+<flow>
+    <nodes>
+        <node id="s1" name="普通脚本1" type="script" language="java">
+            <![CDATA[
+            import cn.hutool.core.collection.ListUtil;
+            import com.yomahub.liteflow.benchmark.cmp.Person;
+            import com.yomahub.liteflow.benchmark.cmp.TestDomain;
+            import com.yomahub.liteflow.script.body.CommonScriptBody;
+            import com.yomahub.liteflow.slot.DefaultContext;
+            import com.yomahub.liteflow.spi.holder.ContextAwareHolder;
+            import com.yomahub.liteflow.script.ScriptExecuteWrap;
+
+            import java.util.List;
+            import java.util.function.ToIntFunction;
+
+            public class Demo implements CommonScriptBody {
+                public Void body(ScriptExecuteWrap wrap) {
+                    int v1 = 2;
+                    int v2 = 3;
+                    DefaultContext ctx = wrap.getCmp().getFirstContextBean();
+                    ctx.setData("s1", v1 * v2);
+
+                    TestDomain domain = ContextAwareHolder.loadContextAware().getBean(TestDomain.class);
+                    String str = domain.sayHello("jack");
+                    ctx.setData("hi", str);
+
+                    List<Person> personList = ListUtil.toList(
+                            new Person("jack", 15000),
+                            new Person("tom", 13500),
+                            new Person("peter", 18600)
+                    );
+
+                    int totalSalary = personList.stream().mapToInt(Person::getSalary).sum();
+
+                    ctx.setData("salary", 47100);
+
+                    return null;
+                }
+            }
+            ]]>
+        </node>
+
+        <node id="s2" name="循环脚本1" type="for_script" language="java">
+            <![CDATA[
+            import com.yomahub.liteflow.script.body.ForScriptBody;
+            import com.yomahub.liteflow.script.ScriptExecuteWrap;
+
+            public class Demo implements ForScriptBody {
+                public Integer body(ScriptExecuteWrap wrap) {
+                    return 2;
+                }
+            }
+            ]]>
+        </node>
+
+        <node id="s3" name="选择脚本" type="switch_script" language="java">
+            <![CDATA[
+            import com.yomahub.liteflow.script.ScriptExecuteWrap;
+            import com.yomahub.liteflow.script.body.SwitchScriptBody;
+
+            public class Demo implements SwitchScriptBody {
+                public String body(ScriptExecuteWrap wrap) {
+                    return "b";
+                }
+            }
+            ]]>
+        </node>
+    </nodes>
+
+    <chain name="chain1">
+        THEN(FOR(s2).DO(THEN(a, b, c, s1)), SWITCH(s3).TO(a,b));
+    </chain>
+</flow>

+ 35 - 0
liteflow-benchmark/liteflow-benchmark-script-javax/src/test/resources/javaxScript.java

@@ -0,0 +1,35 @@
+import cn.hutool.core.collection.ListUtil;
+import com.yomahub.liteflow.benchmark.cmp.Person;
+import com.yomahub.liteflow.benchmark.cmp.TestDomain;
+import com.yomahub.liteflow.script.body.CommonScriptBody;
+import com.yomahub.liteflow.slot.DefaultContext;
+import com.yomahub.liteflow.spi.holder.ContextAwareHolder;
+import com.yomahub.liteflow.script.ScriptExecuteWrap;
+
+import java.util.List;
+import java.util.function.ToIntFunction;
+
+public class Demo implements CommonScriptBody {
+    public Void body(ScriptExecuteWrap wrap) {
+        int v1 = 2;
+        int v2 = 3;
+        DefaultContext ctx = wrap.getCmp().getFirstContextBean();
+        ctx.setData("s1", v1 * v2);
+
+        TestDomain domain = ContextAwareHolder.loadContextAware().getBean(TestDomain.class);
+        String str = domain.sayHello("jack");
+        ctx.setData("hi", str);
+
+        List<Person> personList = ListUtil.toList(
+                new Person("jack", 15000),
+                new Person("tom", 13500),
+                new Person("peter", 18600)
+        );
+
+        int totalSalary = personList.stream().mapToInt(Person::getSalary).sum();
+
+        ctx.setData("salary", 47100);
+
+        return null;
+    }
+}

+ 61 - 0
liteflow-benchmark/pom.xml

@@ -0,0 +1,61 @@
+<?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</artifactId>
+        <groupId>com.yomahub</groupId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>pom</packaging>
+
+
+    <artifactId>liteflow-benchmark</artifactId>
+
+    <properties>
+        <jmh.version>1.37</jmh.version>
+    </properties>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yomahub</groupId>
+            <artifactId>liteflow-spring-boot-starter</artifactId>
+            <version>${revision}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-core</artifactId>
+            <version>${jmh.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-generator-annprocess</artifactId>
+            <version>${jmh.version}</version>
+        </dependency>
+    </dependencies>
+
+    <modules>
+        <module>liteflow-benchmark-script-javax</module>
+    </modules>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>2.8.2</version>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 8 - 3
liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java

@@ -8,6 +8,7 @@
  */
 package com.yomahub.liteflow.property;
 
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.yomahub.liteflow.enums.ParseModeEnum;
@@ -36,7 +37,7 @@ public class LiteflowConfig {
 	// 流程资源扩展数据
 	private String ruleSourceExtData;
 
-	private Map<String, String> ruleSourceExtDataMap = new HashMap<>();
+	private Map<String, String> ruleSourceExtDataMap;
 
 	// slot的数量
 	private Integer slotSize;
@@ -121,7 +122,7 @@ public class LiteflowConfig {
 	private Boolean fastLoad;
 
 	//脚本特殊设置选项
-	private Map<String, String> scriptSetting = new HashMap<>();
+	private Map<String, String> scriptSetting;
 
 	public Boolean getEnableMonitorFile() {
 		return enableMonitorFile;
@@ -498,7 +499,11 @@ public class LiteflowConfig {
 	}
 
 	public Map<String, String> getScriptSetting() {
-		return scriptSetting;
+		if (ObjectUtil.isNull(scriptSetting)) {
+			return MapUtil.empty();
+		}else{
+			return scriptSetting;
+		}
 	}
 
 	public void setScriptSetting(Map<String, String> scriptSetting) {

+ 5 - 1
liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/BooleanScriptBody.java

@@ -1,6 +1,10 @@
 package com.yomahub.liteflow.script.body;
 
-
+/**
+ * Javax语言脚本布尔类型继承类
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
 public interface BooleanScriptBody extends ScriptBody<Boolean> {
 
 }

+ 5 - 0
liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/CommonScriptBody.java

@@ -1,5 +1,10 @@
 package com.yomahub.liteflow.script.body;
 
+/**
+ * Javax语言脚本普通类型继承类
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
 public interface CommonScriptBody extends ScriptBody<Void> {
 
 }

+ 5 - 1
liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/ForScriptBody.java

@@ -1,6 +1,10 @@
 package com.yomahub.liteflow.script.body;
 
-
+/**
+ * Javax语言脚本FOR类型继承类
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
 public interface ForScriptBody extends ScriptBody<Integer> {
 
 }

+ 5 - 0
liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/ScriptBody.java

@@ -2,6 +2,11 @@ package com.yomahub.liteflow.script.body;
 
 import com.yomahub.liteflow.script.ScriptExecuteWrap;
 
+/**
+ * Javax语言脚本继承类的接口
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
 public interface ScriptBody<T> {
     T body(ScriptExecuteWrap wrap);
 }

+ 5 - 1
liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/body/SwitchScriptBody.java

@@ -1,6 +1,10 @@
 package com.yomahub.liteflow.script.body;
 
-
+/**
+ * Javax语言脚本Switch类型继承类
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
 public interface SwitchScriptBody extends ScriptBody<String> {
 
 }

+ 13 - 4
liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/JavaxExecutor.java

@@ -17,6 +17,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * Javax语言执行器,基于liquor
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
 public class JavaxExecutor extends ScriptExecutor {
 
     private final Map<String, Execable> compiledScriptMap = new CopyOnWriteHashMap<>();
@@ -74,10 +79,14 @@ public class JavaxExecutor extends ScriptExecutor {
 
     @Override
     public Object compile(String script) throws Exception {
-        CodeSpec codeSpec = new CodeSpec(convertScript(script))
-                .returnType(Object.class)
-                .parameters(new ParamSpec("_meta", ScriptExecuteWrap.class)).cached(isCache);
-        return Scripts.compile(codeSpec);
+        try{
+            CodeSpec codeSpec = new CodeSpec(convertScript(script))
+                    .returnType(Object.class)
+                    .parameters(new ParamSpec("_meta", ScriptExecuteWrap.class)).cached(isCache);
+            return Scripts.compile(codeSpec);
+        }catch (Exception e){
+            return e;
+        }
     }
 
     private String convertScript(String script){

+ 6 - 1
liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/vo/JavaxSettingMapKey.java

@@ -1,6 +1,11 @@
 package com.yomahub.liteflow.script.javax.vo;
 
+/**
+ * Javax语言特殊配置项的Key
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
 public interface JavaxSettingMapKey {
 
-    String IS_CACHE = "isCache";
+    String IS_CACHE = "javax-is-cache";
 }

+ 1 - 1
liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@@ -216,7 +216,7 @@
       "defaultValue": "com.yomahub.liteflow.thread.LiteFlowDefaultParallelLoopExecutorBuilder"
     },
     {
-      "name": "liteflow.scriptSetting",
+      "name": "liteflow.script-setting",
       "type": "java.util.Map",
       "description": "script special settings.",
       "sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty"

+ 2 - 1
liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/common/application.properties

@@ -1 +1,2 @@
-liteflow.rule-source=common/flow.xml
+liteflow.rule-source=common/flow.xml
+liteflow.script-setting.javax-is-cache=false

+ 2 - 1
pom.xml

@@ -77,7 +77,7 @@
 		<redisson.version>3.21.0</redisson.version>
 		<janino.version>3.1.12</janino.version>
 		<kotlin.version>1.9.23</kotlin.version>
-		<liquor.version>1.3.3</liquor.version>
+		<liquor.version>1.3.5-SNAPSHOT</liquor.version>
 	</properties>
 
 	<dependencyManagement>
@@ -449,6 +449,7 @@
 		<module>liteflow-testcase-el</module>
         <module>liteflow-el-builder</module>
 		<module>liteflow-script-plugin/liteflow-script-javax</module>
+		<module>liteflow-benchmark</module>
 	</modules>
 
 	<distributionManagement>