springboot 2.3.0 + flowable 6.5.0整合(一):部署流程文件及启动流程实例后表结构变动及使用

本文介绍如何在SpringBoot项目中集成Flowable工作流引擎,实现流程定义的自动加载及流程实例的启动。通过具体代码示例,展示如何使用Flowable的API来启动流程实例、获取流程实例ID,并生成当前流程实例的流程图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、启动springboot,resource/processes/下的bpmn文件自动载入,数据库表变动如下:

 此时,流程实例尚未启动,所以_RU_相关表都为空。

2、调用方法:

package com.saicfinance.itsmflowable.controller;

import org.flowable.engine.ProcessEngine;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/bg")
public class BgController {

    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private RepositoryService repositoryService;
    @Qualifier("processEngine")  //样例中没有
    @Autowired
    private ProcessEngine processEngine;

    @GetMapping(value = "/add")
    public String addExpense() {
        //启动流程
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("bg");   //样例的流程key
        return "提交成功.流程Id为:" + processInstance.getId();
    }

}

此时就会正常启动流程实例,并返回流程ID:bad8ad4d-abaf-11ea-a6cf-d8f2ca5b1ea5。查看一下RU数据库表:

ACT_RU_ACTINST、ACT_RU_EXECUTION、ACT_RU_IDENTITYLINK、ACT_RU_TASK出现记录(表数据内容太多,略)。

3、查看当前的流程图,就可看到流程实例已经创建完成:

@GetMapping(value = "/processDiagram")
    public void genProcessDiagram(HttpServletResponse httpServletResponse, @RequestParam(value="processId") String processId) throws Exception {
        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();

        //流程走完的不显示图
        if (pi == null) {
            System.out.println("pi == null");
            return;
        }
        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
        //使用流程实例ID,查询正在执行的执行对象表,返回流程实例对象
        String InstanceId = task.getProcessInstanceId();
        List<Execution> executions = runtimeService
                .createExecutionQuery()
                .processInstanceId(InstanceId)
                .list();

        //得到正在执行的Activity的Id
        List<String> activityIds = new ArrayList<>();
        List<String> flows = new ArrayList<>();
        for (Execution exe : executions) {
            List<String> ids = runtimeService.getActiveActivityIds(exe.getId());
            activityIds.addAll(ids);
        }

        //获取流程图
        BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId());
        ProcessEngineConfiguration engconf = processEngine.getProcessEngineConfiguration();
        ProcessDiagramGenerator diagramGenerator = engconf.getProcessDiagramGenerator();
        InputStream in = diagramGenerator.generateDiagram(bpmnModel, "png", activityIds, flows,
                engconf.getActivityFontName(), engconf.getLabelFontName(), engconf.getAnnotationFontName(),
                engconf.getClassLoader(), 1.0, false);   //这里比例子上,多了最后一个true参数
        OutputStream out = null;
        byte[] buf = new byte[1024];
        int legth = 0;
        try {
            out = httpServletResponse.getOutputStream();
            while ((legth = in.read(buf)) != -1) {
                out.write(buf, 0, legth);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值