Springboot+flowable6.6.0 流程引擎应用

Springboot项目应用流程引擎

 

项目中要用到流程引擎,以前做项目是自己扣摸着做的简版引擎,现在工作中有机会要用流程引擎,就把他写成专题,记录下。

目录

Springboot项目应用流程引擎

 

一、部署flowable。

二、画流程图,在线生成流程xml配置文件。

三、接入项目。


一、部署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.按照自己画的流程图,一步步的验证。

 


 


版权声明:本文为u013972652原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。