Переглянути джерело

增加非springboot的测试用例

bryan.zhang 5 роки тому
батько
коміт
f391a5cd50
26 змінених файлів з 929 додано та 0 видалено
  1. 74 0
      liteflow-test-springboot/pom.xml
  2. 16 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/FlowtestApplication.java
  3. 21 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/TestFlow.java
  4. 27 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/AComponent.java
  5. 30 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/BComponent.java
  6. 30 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CComponent.java
  7. 22 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CondComponent.java
  8. 38 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/DComponent.java
  9. 31 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/EComponent.java
  10. 30 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/FComponent.java
  11. 24 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/GComponent.java
  12. 34 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/HComponent.java
  13. 29 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M1Component.java
  14. 29 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M2Component.java
  15. 34 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M3Component.java
  16. 39 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/MComponent.java
  17. 29 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P1Component.java
  18. 29 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P2Component.java
  19. 37 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/PComponent.java
  20. 131 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest.java
  21. 117 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest2.java
  22. 23 0
      liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/regex/RegexTest.java
  23. 1 0
      liteflow-test-springboot/src/main/resources/application.properties
  24. 0 0
      liteflow-test-springboot/src/main/resources/application.xml
  25. 38 0
      liteflow-test-springboot/src/main/resources/config/flow.xml
  26. 16 0
      liteflow-test-springboot/src/test/java/com/thebeastshop/flowtest/FlowtestApplicationTests.java

+ 74 - 0
liteflow-test-springboot/pom.xml

@@ -0,0 +1,74 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>liteflow</artifactId>
+        <groupId>com.thebeastshop</groupId>
+        <version>2.2.0-SNAPSHOT</version>
+    </parent>
+    <groupId>com.thebeastshop</groupId>
+    <artifactId>liteflow-test-springboot</artifactId>
+    <version>1.0.0</version>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <!-- Import dependency management from Spring Boot -->
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.0.5.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.thebeastshop</groupId>
+            <artifactId>liteflow-spring-boot-starter</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.18.1</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 16 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/FlowtestApplication.java

@@ -0,0 +1,16 @@
+package com.thebeastshop.flowtest;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class FlowtestApplication {
+
+    public static void main(String[] args) {
+        try{
+            SpringApplication.run(FlowtestApplication.class, args);
+        }catch (Throwable t){
+            t.printStackTrace();
+        }
+    }
+}

+ 21 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/TestFlow.java

@@ -0,0 +1,21 @@
+package com.thebeastshop.flowtest;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.entity.data.Slot;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component
+public class TestFlow implements CommandLineRunner {
+
+    @Resource
+    private FlowExecutor flowExecutor;
+
+    @Override
+    public void run(String... args) throws Exception {
+        Slot slot = flowExecutor.execute("chain3", "it's a request");
+        System.out.println(slot);
+    }
+}

+ 27 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/AComponent.java

@@ -0,0 +1,27 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("a")
+public class AComponent extends NodeComponent {
+
+	@Override
+	public void process() {
+		String str = this.getSlot().getRequestData();
+		System.out.println(str);
+		System.out.println("Acomponent executed!");
+
+		this.getSlot().setOutput(this.getNodeId(), "A component output");
+	}
+
+}

+ 30 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/BComponent.java

@@ -0,0 +1,30 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("b")
+public class BComponent extends NodeComponent {
+
+	@Override
+	public void process() {
+		try {
+			Thread.sleep(400L);
+			String[] temp = new String[1000];
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		System.out.println("Bcomponent executed!");
+
+	}
+
+}

+ 30 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CComponent.java

@@ -0,0 +1,30 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("c")
+public class CComponent extends NodeComponent {
+
+	@Override
+	public void process() {
+		try {
+			String[] temp = new String[4000];
+			Thread.sleep(300L);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		System.out.println("Ccomponent executed!");
+
+	}
+
+}

+ 22 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CondComponent.java

@@ -0,0 +1,22 @@
+/**
+ * <p>Title: litis</p>
+ * <p>Description: redis的全方位开发运维平台</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email 47483522@qq.com
+ * @Date 2017-11-28
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import com.thebeastshop.liteflow.core.NodeCondComponent;
+import org.springframework.stereotype.Component;
+
+@Component("cond")
+public class CondComponent extends NodeCondComponent {
+
+	@Override
+	protected Class<? extends NodeComponent> processCond() throws Exception {
+		return BComponent.class;
+	}
+}

+ 38 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/DComponent.java

@@ -0,0 +1,38 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import com.thebeastshop.liteflow.entity.data.Slot;
+import org.springframework.stereotype.Component;
+
+@Component("d")
+public class DComponent extends NodeComponent {
+
+	@Override
+	public void process() {
+		try {
+			Slot slot = this.getSlot();
+			String e = slot.getOutput("e");
+			if(e == null){
+				System.out.println(slot);
+			}
+			System.out.println("D:" + slot.getOutput("e"));
+
+			String[] temp = new String[1400];
+			Thread.sleep(450L);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		System.out.println("Dcomponent executed!");
+
+	}
+
+}

+ 31 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/EComponent.java

@@ -0,0 +1,31 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("e")
+public class EComponent extends NodeComponent {
+
+	@Override
+	public void process() {
+		try {
+			Thread.sleep(120L);
+			System.out.println("E:" + this.getSlot().getOutput("a"));
+			this.getSlot().setOutput(this.getNodeId(), "E component output");
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		System.out.println("Eomponent executed!");
+
+	}
+
+}

+ 30 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/FComponent.java

@@ -0,0 +1,30 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("f")
+public class FComponent extends NodeComponent {
+
+	@Override
+	public void process() {
+		try {
+			String[] temp = new String[400];
+			Thread.sleep(40L);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		System.out.println("Fcomponent executed!");
+
+	}
+
+}

+ 24 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/GComponent.java

@@ -0,0 +1,24 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+@Component("g")
+public class GComponent extends NodeComponent {
+
+	@Override
+	public void process() {
+		System.out.println("Gcomponent executed!");
+		this.getSlot().setResponseData("i am a response");
+	}
+
+}

+ 34 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/HComponent.java

@@ -0,0 +1,34 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import com.thebeastshop.liteflow.entity.data.DefaultSlot;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("h")
+public class HComponent extends NodeComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	public void process() {
+		System.out.println("Hcomponent executed!");
+		try{
+			flowExecutor.invoke("strategy1",3, DefaultSlot.class, this.getSlotIndex());
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+	}
+}

+ 29 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M1Component.java

@@ -0,0 +1,29 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("m1")
+public class M1Component extends NodeComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	public void process() {
+		System.out.println("m1 component executed!");
+	}
+
+}

+ 29 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M2Component.java

@@ -0,0 +1,29 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("m2")
+public class M2Component extends NodeComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	public void process() {
+		System.out.println("m2 component executed!");
+	}
+
+}

+ 34 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M3Component.java

@@ -0,0 +1,34 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import com.thebeastshop.liteflow.entity.data.DefaultSlot;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("m3")
+public class M3Component extends NodeComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	public void process() {
+		System.out.println("m3 component executed!");
+		try{
+			flowExecutor.invoke("strategy2",10, DefaultSlot.class, this.getSlotIndex());
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+	}
+}

+ 39 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/MComponent.java

@@ -0,0 +1,39 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import com.thebeastshop.liteflow.core.NodeCondComponent;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("m")
+public class MComponent extends NodeCondComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	protected Class<? extends NodeComponent> processCond() throws Exception {
+		System.out.println("m conponent executed");
+		Integer flag = this.getSlot().getChainReqData("strategy1");
+		if(flag == 1) {
+			return M1Component.class;
+		}else if(flag == 2){
+			return M2Component.class;
+		}else {
+			return M3Component.class;
+		}
+
+	}
+
+}

+ 29 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P1Component.java

@@ -0,0 +1,29 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("p1")
+public class P1Component extends NodeComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	public void process() {
+		System.out.println("p1 component executed!");
+	}
+
+}

+ 29 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P2Component.java

@@ -0,0 +1,29 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("p2")
+public class P2Component extends NodeComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	public void process() {
+		System.out.println("p2 component executed!");
+	}
+
+}

+ 37 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/PComponent.java

@@ -0,0 +1,37 @@
+/**
+ * <p>Title: liteFlow</p>
+ * <p>Description: 轻量级的组件式流程框架</p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2017-8-1
+ * @version 1.0
+ */
+package com.thebeastshop.flowtest.components;
+
+import com.thebeastshop.liteflow.core.FlowExecutor;
+import com.thebeastshop.liteflow.core.NodeComponent;
+import com.thebeastshop.liteflow.core.NodeCondComponent;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component("p")
+public class PComponent extends NodeCondComponent {
+
+	@Resource
+	private FlowExecutor flowExecutor;
+
+	@Override
+	protected Class<? extends NodeComponent> processCond() throws Exception {
+		System.out.println("p conponent executed");
+		Integer flag = this.getSlot().getChainReqData("strategy2");
+		if(flag == 10) {
+			return P1Component.class;
+		}else {
+			return P2Component.class;
+		}
+
+	}
+
+}

+ 131 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest.java

@@ -0,0 +1,131 @@
+package com.thebeastshop.flowtest.curator;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.framework.recipes.cache.*;
+import org.apache.curator.retry.RetryNTimes;
+
+public class CuratorTest {
+
+    /** Zookeeper info */
+    private static final String ZK_ADDRESS = "123.206.92.144:2181,123.206.92.144:2182,123.206.92.144:2183";
+    private static final String ZK_PATH = "/zktest/a1/aa1";
+
+    public static void main(String[] args) throws Exception {
+        // 1.Connect to zk
+        CuratorFramework client = CuratorFrameworkFactory.newClient(
+                ZK_ADDRESS,
+                new RetryNTimes(10, 5000)
+        );
+        client.start();
+
+        checkNode(client);
+
+//        childNodeListen(client);
+
+//        removeNodeData(client);
+
+//        createNode(client);
+
+//        nodeListen(client);
+//
+//        modifyNodeData(client);
+
+        System.in.read();
+
+//        getNodeData(client);
+//
+//
+
+    }
+
+    private static void checkNode(CuratorFramework client) throws Exception {
+    	System.out.println(client.checkExists().forPath("/test"));
+    }
+
+    private static void createNode(CuratorFramework client) throws Exception {
+    	String data1 = "nice to meet you";
+        print("create", ZK_PATH, data1);
+        client.create().
+                creatingParentsIfNeeded().
+                forPath(ZK_PATH, data1.getBytes());
+    }
+
+    private static void getNodeData(CuratorFramework client) throws Exception {
+    	print("ls", "/");
+        print(client.getChildren().forPath("/"));
+        print("get", ZK_PATH);
+        print(client.getData().forPath(ZK_PATH));
+    }
+
+    private static void modifyNodeData(CuratorFramework client) throws Exception {
+    	String data2 = "world for u";
+        print("set", ZK_PATH, data2);
+        client.setData().forPath(ZK_PATH, data2.getBytes());
+        print("get", ZK_PATH);
+        print(client.getData().forPath(ZK_PATH));
+    }
+
+    private static void removeNodeData(CuratorFramework client) throws Exception {
+    	print("delete", "/zktest/dddd");
+        client.delete().forPath("/zktest/dddd");
+        print("ls", "/");
+        print(client.getChildren().forPath("/"));
+    }
+
+    private static void nodeListen(CuratorFramework client) throws Exception {
+    	final NodeCache cache = new NodeCache(client,ZK_PATH);
+        cache.start();
+
+        cache.getListenable().addListener(new NodeCacheListener() {
+
+            @Override
+            public void nodeChanged() throws Exception {
+                byte[] res = cache.getCurrentData().getData();
+                System.out.println("data: " + new String(res));
+            }
+        });
+    }
+
+    private static void childNodeListen(CuratorFramework client) throws Exception {
+    	final PathChildrenCache cache = new PathChildrenCache(client,"/zktest",true);
+        cache.start();
+
+        cache.getListenable().addListener(new PathChildrenCacheListener() {
+
+            @Override
+            public void childEvent(CuratorFramework curator, PathChildrenCacheEvent event) throws Exception {
+                switch (event.getType()) {
+                case CHILD_ADDED:
+                    System.out.println("add:" + event.getData().getPath() + ":" + new String(event.getData().getData()));
+                    break;
+                case CHILD_UPDATED:
+                    System.out.println("update:" + event.getData().getPath() + ":" + new String(event.getData().getData()));
+                    break;
+                case CHILD_REMOVED:
+                    System.out.println("remove:" + event.getData().getPath() + ":" + new String(event.getData().getData()));
+                    break;
+                default:
+                    break;
+                }
+            }
+        });
+    }
+
+
+    private static void print(String... cmds) {
+        StringBuilder text = new StringBuilder("$ ");
+        for (String cmd : cmds) {
+            text.append(cmd).append(" ");
+        }
+        System.out.println(text.toString());
+    }
+
+    private static void print(Object result) {
+        System.out.println(
+                result instanceof byte[]
+                    ? new String((byte[]) result)
+                        : result);
+    }
+
+}

+ 117 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest2.java

@@ -0,0 +1,117 @@
+package com.thebeastshop.flowtest.curator;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.framework.recipes.cache.*;
+import org.apache.curator.retry.RetryNTimes;
+
+public class CuratorTest2 {
+
+    /** Zookeeper info */
+    private static final String ZK_ADDRESS = "114.55.174.189:2181";
+    private static final String ZK_PATH = "/zktest/ffff";
+
+    public static void main(String[] args) throws Exception {
+        // 1.Connect to zk
+        CuratorFramework client = CuratorFrameworkFactory.newClient(
+                ZK_ADDRESS,
+                new RetryNTimes(10, 5000)
+        );
+        client.start();
+
+//        removeNodeData(client);
+
+//        createNode(client);
+
+//        nodeListen(client);
+//
+        modifyNodeData(client);
+
+    }
+
+    private static void createNode(CuratorFramework client) throws Exception {
+    	String data1 = "hello";
+        print("create", ZK_PATH, data1);
+        client.create().
+                creatingParentsIfNeeded().
+                forPath(ZK_PATH, data1.getBytes());
+    }
+
+    private static void getNodeData(CuratorFramework client) throws Exception {
+    	print("ls", "/");
+        print(client.getChildren().forPath("/"));
+        print("get", ZK_PATH);
+        print(client.getData().forPath(ZK_PATH));
+    }
+
+    private static void modifyNodeData(CuratorFramework client) throws Exception {
+    	String data2 = "world for u";
+        print("set", ZK_PATH, data2);
+        client.setData().forPath(ZK_PATH, data2.getBytes());
+        print("get", ZK_PATH);
+        print(client.getData().forPath(ZK_PATH));
+    }
+
+    private static void removeNodeData(CuratorFramework client) throws Exception {
+    	print("delete", "/zktest/dddd");
+        client.delete().forPath("/zktest/dddd");
+        print("ls", "/");
+        print(client.getChildren().forPath("/"));
+    }
+
+    private static void nodeListen(CuratorFramework client) throws Exception {
+    	final NodeCache cache = new NodeCache(client,ZK_PATH);
+        cache.start();
+
+        cache.getListenable().addListener(new NodeCacheListener() {
+
+            @Override
+            public void nodeChanged() throws Exception {
+                byte[] res = cache.getCurrentData().getData();
+                System.out.println("data: " + new String(res));
+            }
+        });
+    }
+
+    private static void childNodeListen(CuratorFramework client) throws Exception {
+    	final PathChildrenCache cache = new PathChildrenCache(client,"/zktest",true);
+        cache.start();
+
+        cache.getListenable().addListener(new PathChildrenCacheListener() {
+
+            @Override
+            public void childEvent(CuratorFramework curator, PathChildrenCacheEvent event) throws Exception {
+                switch (event.getType()) {
+                case CHILD_ADDED:
+                    System.out.println("add:" + event.getData().getPath() + ":" + new String(event.getData().getData()));
+                    break;
+                case CHILD_UPDATED:
+                    System.out.println("update:" + event.getData().getPath() + ":" + new String(event.getData().getData()));
+                    break;
+                case CHILD_REMOVED:
+                    System.out.println("remove:" + event.getData().getPath() + ":" + new String(event.getData().getData()));
+                    break;
+                default:
+                    break;
+                }
+            }
+        });
+    }
+
+
+    private static void print(String... cmds) {
+        StringBuilder text = new StringBuilder("$ ");
+        for (String cmd : cmds) {
+            text.append(cmd).append(" ");
+        }
+        System.out.println(text.toString());
+    }
+
+    private static void print(Object result) {
+        System.out.println(
+                result instanceof byte[]
+                    ? new String((byte[]) result)
+                        : result);
+    }
+
+}

+ 23 - 0
liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/regex/RegexTest.java

@@ -0,0 +1,23 @@
+package com.thebeastshop.flowtest.regex;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class RegexTest {
+
+	public static void main(String[] args) {
+		String str = "192.168.1.1:2181,192.168.1.2:2182,192.168.1.3:2183";
+		List<String> list = new ArrayList<String>();
+	    Pattern p = Pattern.compile("[\\w\\d][\\w\\d\\.]+\\:(\\d)+(\\,[\\w\\d][\\w\\d\\.]+\\:(\\d)+)*");
+	    Matcher m = p.matcher(str);
+	    while(m.find()){
+	        list.add(m.group());
+	    }
+	    System.out.println(list.size());
+	    System.out.println(list);
+
+	}
+
+}

+ 1 - 0
liteflow-test-springboot/src/main/resources/application.properties

@@ -0,0 +1 @@
+liteflow.ruleSource=config/flow.xml

+ 0 - 0
liteflow-test-springboot/src/main/resources/application.xml


+ 38 - 0
liteflow-test-springboot/src/main/resources/config/flow.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<flow>
+	<!-- 如果和spring集成,以下<nodes>配置可以不要
+	<nodes>
+		<node id="a" class="com.thebeastshop.flowtest.components.AComponent"/>
+		<node id="b" class="com.thebeastshop.flowtest.components.BComponent"/>
+		<node id="c" class="com.thebeastshop.flowtest.components.CComponent"/>
+		<node id="d" class="com.thebeastshop.flowtest.components.DComponent"/>
+		<node id="e" class="com.thebeastshop.flowtest.components.EComponent"/>
+		<node id="f" class="com.thebeastshop.flowtest.components.FComponent"/>
+		<node id="g" class="com.thebeastshop.flowtest.components.GComponent"/>
+		<node id="cond" class="com.thebeastshop.liteflow.test.component.CondComponent"/>
+	</nodes>
+	-->
+
+	<chain name="chain1">
+		<then value="a,cond(b|d)"/> <!-- cond是条件节点,根据cond里的逻辑决定路由到b节点还是d节点,可以配置多个 -->
+		<then value="e,f,g"/>
+	</chain>
+
+	<chain name="chain2">
+		<then value="a,c"/> <!-- then表示串行 -->
+		<when value="b,d"/> <!-- when表示串行 -->
+		<then value="e,f,g"/>
+	</chain>
+
+	<chain name="chain3">
+		<then value="a,c,h,g"/>
+	</chain>
+
+	<chain name="strategy1">
+		<then value="m(m1|m2|m3)"/>
+	</chain>
+
+	<chain name="strategy2">
+		<then value="p(p1|p2)"/>
+	</chain>
+</flow>

+ 16 - 0
liteflow-test-springboot/src/test/java/com/thebeastshop/flowtest/FlowtestApplicationTests.java

@@ -0,0 +1,16 @@
+package com.thebeastshop.flowtest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class FlowtestApplicationTests {
+
+    @Test
+    public void contextLoads() {
+    }
+
+}