本项目是基于开源SnakerFlow工作流引擎,将其和springboot进行整合成为一个能够快速工程应用的轻量级工作流引擎组件,本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持。
使用定位:适用于常见的业务审批流程和状态机流转,状态机流转相对复杂、审批涉及多角色、流程模板需要灵活定义。
本项目也是本着为大家提供一个可以一起讨论和改进SnakerFlow的平台,不会应用于任何商业项目和商业盈利, 交流群QQ:979147234
- snakerflow和springboot无缝整合
- 支持starter方式一键引入
- 支持一键初始化依赖SQL表
- ORM支持mybatis和mybatis-plus
- 兼容redis cacheManager冲突
- 目前支持H2、Mysql示例
- 快速体验
- git clone git@github.com:snakerflow-starter/snakerflow-spring-boot-starter.git
- 运行 snakerflow-spring-boot-starter-example 中的Main
- 访问 http://localhost:8080/getProcessList 初始化流程,返回process
- 访问 http://localhost:8080/start 初始化流程实例,返回order
- 快速使用,首先引入starter依赖
<dependency> <groupId>com.github.snakerflow-starter</groupId> <artifactId>snakerflow-spring-boot-starter</artifactId> <version>1.0.3</version> </dependency>
- 初始化依赖数据库表
- 2019年12月05日 新增controller用于调试
- 2020年1月4日 完成starter封装
- 2020年3月8日 完成starter包的完全抽取,并增加测试工程,一目了然
- 2020年3月16日 发布第一版starter 1.0.0到maven中央仓库
- 2020年3月16日 发布1.0.1 兼容Redis cacheManager 冲突
- 2020年05月31日 去掉无用依赖,快速使用体验
- 可以使用参考项目实例中的 SnakerEngineFacets
- 初始化流程 SnakerEngineFacets.initFlows(已经预设了个请假流程)
- 发起一个测试流程
public Order startInstanceById(String processId, String operator, Map<String, Object> args) { return engine.startInstanceById(processId, operator, args); }
- 流程推进
public List<Task> execute(String taskId, String operator, Map<String, Object> args) { return engine.executeTask(taskId, operator, args); }
Snaker是一个基于Java的轻量级工作流引擎,适用于企业应用中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持。
轻量: snaker-core.jar大小208K,代码行数约7000行,强大的扩展支持,不依赖于具体的ORM框架
简单: 表设计简单,七张核心表
<process displayName="请假流程测试" instanceUrl="/snaker/flow/all" name="leave"> <start displayName="start1" layout="24,124,-1,-1" name="start1"> <transition g="" name="transition1" offset="0,0" to="apply"/> </start> <end displayName="end1" layout="570,124,-1,-1" name="end1"/> <transition g="" name="transition2" offset="0,0" to="approveDept"/> </task> <task assignee="approveDept.operator" displayName="部门经理审批" form="/flow/leave/approveDept" layout="272,122,-1,-1" name="approveDept" performType="ANY"> <transition g="" name="transition3" offset="0,0" to="decision1"/> </task> <decision displayName="decision1" expr="#day > 2 ? 'transition5' : 'transition4'" layout="426,124,-1,-1" name="decision1"> <transition displayName="<=2天" g="" name="transition4" offset="0,0" to="end1"/> <transition displayName=">2天" g="" name="transition5" offset="0,0" to="approveBoss"/> </decision> <task assignee="approveBoss.operator" displayName="总经理审批" form="/flow/leave/approveBoss" layout="404,231,-1,-1" name="approveBoss" performType="ANY"> <transition g="" name="transition6" offset="0,0" to="end1"/> </task> </process>
- snaker的流程设计可以使用snaker-web或者使用eclipse插件设计,插件在群聊里面。
- 发起一个流程 ueisG6.png
- 流转动作 ueiUr4.png
https://yunmel.gitbooks.io/snakerflow/
QQ群:979147234
如果感觉本项目对你有用,请作者喝个咖啡吧