# process-engine **Repository Path**: biglyc/process_engine ## Basic Information - **Project Name**: process-engine - **Description**: 流程引擎定义业务执行流程,使得实现复杂逻辑代码时,不再面向过程,不再123456789步,变得可视化 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 2 - **Created**: 2018-06-12 - **Last Updated**: 2024-01-17 ## Categories & Tags **Categories**: workflow **Tags**: None ## README ### 流程引擎 ### 项目介绍 process-engine 1. 定义业务执行流程,使得实现复杂逻辑代码时,不再面向过程,不再123456789步 2. 新来的伙伴不用再看老代码时,到处跳转,东跳一下,西跳一下看逻辑 3. 实现上下文管控,不再随意往上下文中添加各种参数传递 4. 实现前处理和后处理类切面,可用于但不限于,日志收集,业务数据收集,指标收集等。 ### 语言:Java ### 使用说明 ### 一步:添加spring配置 在web.xml里,配置: ``` contextConfigLocation classpath*:META-INF/spring/process-engine-context.xml ``` ### 二步:定义流程 ``` package cn.ted; import cn.ted.process.engine.Context; import cn.ted.process.engine.ProcessContextFactory; import cn.ted.process.engine.annotation.ProcessScene; import cn.ted.process.engine.controller.RetryController; import cn.ted.process.engine.core.AbstractProcessDefineRegister; import cn.ted.process.engine.core.DefaultProcessDefine; import cn.ted.process.engine.core.DefaultProcessManager; import cn.ted.process.engine.core.ProcessDefine; import cn.ted.process.engine.handler.Handler; import cn.ted.process.engine.switcher.Switcher; import com.google.common.collect.Maps; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Map; /** * Unit test for simple App. */ public class AppTest { @Resource private static Handler oneHandler; @Resource private static Handler twoHandler; @Resource private static Handler threeHandler; @Resource private static Handler fourHandler; @Resource private static Handler fiveHandler; @Resource private static Handler sixHandler; @Resource private static Switcher oneSwitcher; @Resource private static DefaultProcessManager defaultProcessManager; public static void main(String[] args) { Map initParam = Maps.newHashMap(); Context processCtx = ProcessContextFactory.createDefaultProcessCtx(initParam, "testProcess"); defaultProcessManager.run(processCtx); } @ProcessScene(name = "testProcess") @Service public static class XProcess extends AbstractProcessDefineRegister { private ProcessDefine process; @Override protected ProcessDefine createProcessDefine() { return this.process; } @Override public void register() { process = new DefaultProcessDefine(); //定义业务流程第一步 process.defineStart(oneHandler); //定义第一步执行结果为true时,执行 twoHandler process.doHandler(oneHandler).when(true).go(twoHandler); //定义第一步执行结果为false时,执行 threeHandler process.doHandler(oneHandler).when(false).go(threeHandler); //twoHandler执行结果为true时,执行 oneSwitcher 选择器 process.doHandler(twoHandler).when(false).go(oneSwitcher); //oneSwitcher 选择器执行结果为 0时,执行 fourHandler process.doSwitcher(oneSwitcher).when(NumberUtils.INTEGER_ZERO).go(fourHandler); //oneSwitcher 选择器执行结果为 0时,执行 fiveHandler process.doSwitcher(oneSwitcher).when(NumberUtils.INTEGER_ONE).go(fiveHandler); //重试增强控制器,当执行sixHandler执行结果不为true时,发生重试,每次间隔10秒,重试3次 process.doController(new RetryController(sixHandler,true,10,3)); } } } ```