介绍
springboot-flowable 快速开发工作流
软件架构
springboot + flowable
使用说明
- 将flowable的依赖加入到POM中即可,flowable使用需要一个数据库,这里为了方便我选择mysql
org.springframework.boot spring-boot-starter-web org.flowable flowable-spring-boot-starter 6.3.0mysql mysql-connector-java 5.1.45
2.yml 文件配置
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/flowable-spring-boot?characterEncoding=UTF-8 username: root password: rootflowable:#关闭定时任务JOB async-executor-activate: false
这样操作后,flowable与springBoot的整个就完成了!
然后就可以运行了,初次运行时flowable会将自动执行flowable中的初始化脚本完成工作流所需要的数据表的建立,如果指定的数据库中还未创建过flowable的相关数据表的话。
定义流程文件
ExpenseProcess.bpmn20.xml
<?xml version="1.0" encoding="UTF-8"?>报销流程 500}]]>
其中的两个代理类为:
import org.flowable.engine.delegate.TaskListener;import org.flowable.task.service.delegate.DelegateTask; public class ManagerTaskHandler implements TaskListener { @Override public void notify(DelegateTask delegateTask) { delegateTask.setAssignee("经理"); } }public class BossTaskHandler implements TaskListener { @Override public void notify(DelegateTask delegateTask) { delegateTask.setAssignee("老板"); } }
尽管上面的BPMN文件很长,但放心,毕竟那是通过相关的工具生成出来的,对于核心的逻辑部分也很少(主要在process 标签内) ,如需要详细了解的可自行学习下BPMN的标签即可!当然,在flowable的使用文档中也有相关的描述,详见:Creating a ProcessEngine
![b5208f131451602af36e3ca078119bc0.png](https://i-blog.csdnimg.cn/blog_migrate/62b3927a5211ea901af45ed822194bfe.jpeg)
这样当此框架启动的时候它会默认加载resource目录下的processes时就可以将此流程配置加载到数据库进行持久化了
测试controller
为了方便这里通过一个controller来完成此DEMO的快速编写
@Controller@RequestMapping(value = "expense")public class ExpenseController { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired private RepositoryService repositoryService; @Autowired private ProcessEngine processEngine; /***************此处为业务代码******************/}/** * 添加报销 * * @param userId 用户Id * @param money 报销金额 * @param descption 描述 */ @RequestMapping(value = "add") @ResponseBody public String addExpense(String userId, Integer money, String descption) { //启动流程 HashMap map = new HashMap<>(); map.put("taskUser