SpringBoot整合Flowable

2023-09-17 16:26:45

1. 配置

(1) 引入maven依赖

        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.7.2</version>
        </dependency>
        <!-- MySQL连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

(2)配置文件

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306/flowable?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password= root

(3)启动项目即可在数据库自动生成相关表

数据库表组说明
act_app_*跟应用程序相关的表。
act_cmmn_*跟 CMMN 协议相关的表。
act_co_*跟内容引擎相关的表
act_dmn_*跟 DMN 协议相关的表。
act_evt_log事件日志表
act_fo_*表单相关的表,这些表主要存储表单相关的数据。
act_ge_*通用表,普通数据,各种情况都使用的数据。
act_hi_*历史数据的表,这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。
act_id_*用户用户组表 /身份数据表,这些表包含标识的信息,如用户,用户组,等等。
act_procdef_info流程定义动态改变信息表
act_re_*流程的定义、流程的资源表,这些表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
act_ru_*运行时信息表,存储着流程变量,用户任务,变量,职责(job)等运行时的数据。只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
flw_channel_definition都是跟泳道相关的表。
flw_ev_*跟 Liquibase 相关的表。
flw_event_*跟事件相关的表。
flw_ru_*运行时信息表。

(4)画流程图

       a. 安装 IDEA 插件:lowable BPMN visualizer
       b. 在 resources 目录下新建 processes 目录,该目录下的流程文件将来会被自动部署。
       c. 在 processes 目录下,新建一个 BPMN 文件,固定后缀为.bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
  <process id="demo" name="demo" isExecutable="true">
    <startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/>
    <userTask id="sid-57c1b617-c369-4556-8154-a620652b3ffd" name="申请人" flowable:assignee="${crew}" flowable:formFieldValidation="true"/>
    <sequenceFlow id="sid-14435c94-d0a5-4199-b6fb-c08739f014f3" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-57c1b617-c369-4556-8154-a620652b3ffd" name="开始流程"/>
    <sequenceFlow id="sid-023ac358-3952-42fb-8f59-0ea3fb4d55bd" sourceRef="sid-57c1b617-c369-4556-8154-a620652b3ffd" targetRef="sid-e656adbe-9181-4852-9df4-3e6c79f6933a" name="通过"/>
    <userTask id="sid-e656adbe-9181-4852-9df4-3e6c79f6933a" name="组长" flowable:assignee="${leader}" flowable:formFieldValidation="true"/>
    <endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <sequenceFlow id="sid-dfe46275-5cb0-40cd-8bd3-b5b9c4178dd6" sourceRef="sid-e656adbe-9181-4852-9df4-3e6c79f6933a" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_demo">
   
  </bpmndi:BPMNDiagram>
</definitions>

(5)调用相关API处理流程

    @Resource
    RuntimeService runtimeService;
    @Resource
    TaskService taskService;   
     /**
     * 通过流程id开启一个流程,并设置变量,用于流程图 ${name} 动态赋值
     */
    @Test
    void contextLoads() {
        HashMap<String, Object> variables = new HashMap<>();
        variables.put("leader","zp");
        variables.put("crew","zj");
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("demo", variables);
        System.out.println(processInstance.getProcessInstanceId());
    }

    /**
     * 通过分配任务的人获取任务并处理任务
     */
    @Test
    void contextLoads1() {
        List<Task> list = taskService.createTaskQuery().taskAssignee("zp").orderByTaskId().desc().list();
        for (Task task : list) {
            taskService.complete(task.getId());
        }
    }

更多推荐

在 Substance Painter中自定义Shader

为什么要学习在SubstancePainter中自定义Shader?答:需要实现引擎与SubstancePainter中的渲染效果一致,材质的配置也一致,所见即所得。基础概述首先在着色器设置这里,我们可以查看当前渲染使用的着色器如果没有着色器设置窗口,可以在窗口这里打开点击着色器名称,可以切换当前拥有的shader相应

沉降安全监测之静力水准仪安装与精度分析

静力水准仪的安装使用步骤如下:1、选择合适的安装位置:静力水准仪应该安装在平稳且不易受到外力影响的地面上,以确保测量结果的准确性。同时,应避免安装在有风的地方,因为风会影响水准仪的读数。2、安装支架:静力水准仪需要安装在支架上才能使用。支架应该牢固可靠,能够承受水平方向上的荷载。支架的高度应该与被测物体的高度相匹配,以

【2023研电赛】华东赛区一等奖:基于EtherCAT通信有限时间位置收敛伺服系统

本文为2023年第十八届中国研究生电子设计竞赛作品分享,参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!,分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!基于EtherCAT通信有限时间位置收敛伺服系统参赛单位:浙江工业大学指导老师:陈强吴春参赛队员:沙为民吴辰浩申屠方

ActiveMQ面试题(二)

文章目录前言一、死信队列二、ActiveMQ中的消息重发时间间隔和重发次数吗?总结前言死信队列ActiveMQ中的消息重发时间间隔和重发次数吗?一、死信队列如果你想在消息处理失败后,不被服务器删除,还能被其他消费者处理或重试,可以关闭AUTO_ACKNOWLEDGE,将ack交由程序自己处理。那如果使用了AUTO_AC

【2023华为杯A题】WLAN网络信道接入机制建模(代码、思路.....)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1背景1.1分布式信道接入和二进制指数退避1.2基于Markovchain的DCF机制建模和系统性能分析📚2WLAN组

P1827 [USACO3.4] 美国血统 American Heritage(前序 + 中序 生成后序)

P1827[USACO3.4]美国血统AmericanHeritage(前序+中序生成后序)一、前言二叉树入门题。涉及到树的基本知识、树的结构、树的生成。本文从会从结构,到完成到,优化。二、基础知识Ⅰ、二叉树的遍历前序遍历:根左右中序遍历:左根右后序遍历:左右根通过上面的观察,可得根在那,就是什么方式的遍历Ⅱ、二叉树的

Kotlin Coroutines包下的select函数简介

在工作中,发现了kotlinCoroutines包下有大量功能非常强大的API,这篇文章中,我们主要来聊一聊select函数1.什么是select函数想象一下这个场景,在程序应用中,为了实现一个业务逻辑,你可能有好几种方式来实现,但是我只需要最快实现结果的一种方式,这时候我们就可以使用select函数了。如果还不是很清

地球系统模式(CESM)技术应用

近年升级的CESM2.0在大气、陆地、海洋、海冰、陆冰、径流等几大模块以及一个中央耦合器(CIME)中都有较大更新,可以在不同的硬件平台上移植使用,尤其可以用于CMIP6的研究。CESM中CIME(CommonInfrastructureforModelingtheEarth)为模式配置、编译和运行提供个例控制器。CA

web浏览器公网远程访问jupyter notebook【内网穿透】

文章目录前言1.Python环境安装2.Jupyter安装3.启动JupyterNotebook4.远程访问4.1安装配置cpolar内网穿透4.2创建隧道映射本地端口5.固定公网地址前言JupyterNotebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如Python、R、Julia等。它在数据科学

数据不平衡GPT调研

数据不平衡判别式和生成式的区别是什么判别式模型(DiscriminativeModels)生成式模型(GenerativeModels)对比对于AE或者VAE这种生成式模型,其实更关注数据本身,那这种有什么好处?那对于判别式模型,它更关注什么呢?它存在什么样的弊端?比如可能落入局部最优,无法进行优化啥的展开讲讲这个判别

android 存储新特性

分区存储本页内容应用访问限制将分区存储与FUSE搭配使用FUSE和SDCardFSFUSE性能微调减轻与FUSE相关的性能影响隐私优势远超性能劣势MediaProvider和FUSE更新分区存储会限制应用访问外部存储空间。在Android11或更高版本中,以API30或更高版本为目标平台的应用必须使用分区存储。之前,在

热文推荐