Springboot项目应用流程引擎
项目中要用到流程引擎,以前做项目是自己扣摸着做的简版引擎,现在工作中有机会要用流程引擎,就把他写成专题,记录下。
目录
一、部署flowable。
flowable部署见文章:https://blog.csdn.net/u013972652/article/details/109990809
二、画流程图,在线生成流程xml配置文件。
1.搭建flowable后,访问页面,在流程编辑器中画流程:
2.一定要有开始和结束,
3.在画图过程中,注意流程路线一定要指向下个节点的正中间红点处,如下图,否则保存时试运行会报错 invalid target for sequenceflow(这个奇葩的错误让我鼓捣了好久)。
4.最后保存流程图时要试运行下,看图是否画的正确,error 就要重新修改了,注意,最好id都命名,这样可以看到哪个节点报的error。
5.没有error,可以点保存或者右上角 下载按钮,可以直接导入项目来用了。
6.如果有小可爱们跟我一样,flowable-ui 和flowable应用配置的同一个数据库,那就简单了,设计好流程图,在APP.ADMIN.TITLE 中 的流程引擎,点下图中红框里的按钮上传自己定义的xml文件,就直接部署到项目里面了。
三、接入项目。
1.springboot项目自行搭建添加数据库启动没问题后,引入包依赖,把之前编辑好的xml文件放到 resurces/processes 路径下。
<!--flowable工作流依赖-->
<!-- https://mvnrepository.com/artifact/org.flowable/flowable-spring-boot-starter -->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.6.0</version>
</dependency>
2. 启动成功,创建86张表。
启动失败报错1:
因为我搭建的flowable和Springboot 用的同一个数据库,所以尝试新建了一个数据库,并修改了配置,结果仍旧报错: 启动失败报错2
启动失败报错2:Table 'flowstudy.act_ge_property' doesn't exist,这是个全新的数据库,是没有数据表的,照理来讲应该创建的,可为什么没有触发创建呢?
经过一番倒腾发现了问题,数据库链接没有制定 schema,然后schema日志是创建过了这86张表了,但是库里并没有。
解决方案: 在数据库连接里加上 &nullCatalogMeansCurrent=true 指定只读取当前schema, 之后创建表并启动成功了。
3. 按照文档,写了一个简单的测试如下,然后用 POSTMAN 访问 :localhost:31882/flowable/test,结果报错,流程ID找不到,继续踩坑~~
回想了下,我是新建的库,所以库里没有我之前保存的流程图。那么我再切回 搭建flowable的库试试,里面是有数据的。 然后删掉了processes里的xml文件,用
红色字体是坑,其实应该是有两种部署方式,
a:之前编辑好的xml文件放到 resurces/processes 路径下,启动项目时自动部署流程图到数据库了,此时可以删掉xml文件,因为数据库保存了,本地文件没什么作用了
b:根据文章部署了FlowableModeler 管理页面的话 (https://blog.csdn.net/u013972652/article/details/109990809),可以编辑完流程图后下载xml文件,然后在 http://10.19.**.***:8080/flowable-ui/admin/#/process-engine 页面手动部署流程图,截图如下: 此种操作生效的前提是 FlowableModeler 和 Springboot项目是同一个数据库
startProcessInstanceByKey(),找到了流程文件,返回了流程ID。
@Slf4j
@RequestMapping("flowable")
@RestController
public class TestController {
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
@Autowired
private RepositoryService repositoryService;
@Qualifier("processEngine")
@Autowired
private ProcessEngine processEngine;
@GetMapping("test")
public String createProcess(){
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("themis-v1");
return "创建流程成功,流程ID为:" + processInstance.getId();
}
}
如图:
4.按照自己画的流程图,一步步的验证。