Java学习笔记-day02-Flowable基础API小结

news2024/12/28 6:10:36

1.创建ProcessEngine

使用编码创建

    @Test
    public void processEngine01(){
        // 获取  ProcessEngineConfiguration 对象
        ProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();
        // 配置 相关的数据库的连接信息
        configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("123456");
        configuration.setJdbcUrl("jdbc:mysql://localhost:3306/flowable-learn?serverTimezone=UTC&nullCatalogMeansCurrent=true");
        // 如果数据库中的表结构不存在就新建
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

        ProcessEngine processEngine = configuration.buildProcessEngine();
    }

使用配置文件创建

  1. 在resources下创建flowable.cfg.xml文件
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="processEngineConfiguration"
          class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/flowable-learn?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC&amp;nullCatalogMeansCurrent=true" /><property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="123456" />
        <property name="databaseSchemaUpdate" value="true" />
        <property name="asyncExecutorActivate" value="false" />
    </bean>
</beans>
  1. 编码加载配置文件,创建ProcessEngine
    /**
     * 加载默认的配置文件
     */
    @Test
    public void processEngin02(){
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println("defaultProcessEngine = " + defaultProcessEngine);
    }

    /**
     * 加载自定义名称的配置文件
     */
    @Test
    public void processEngin03() {
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResource("flowable.cfg.xml");
        ProcessEngine processEngine = configuration.buildProcessEngine();
        System.out.println("processEngine = " + processEngine);
    }

2.获取service

    /**
     * 获取服务
     */
    @Test
    public void getService() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        // 获取运行时服务 RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 获取仓库服务 RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 获取任务服务 TaskService
        TaskService taskService = processEngine.getTaskService();
        // 获取管理服务 ManagementService
        ManagementService managementService = processEngine.getManagementService();
        // 获取身份认证服务 IdentityService
        IdentityService identityService = processEngine.getIdentityService();
        // 获取历史服务 HistoryService
        HistoryService historyService = processEngine.getHistoryService();
        // 获取表单服务 FormService
        FormService formService = processEngine.getFormService();
        // 获取动态BPMN服务 DynamicBpmnService
        DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();

        System.out.println("Runtime Service: " + runtimeService);
        System.out.println("Repository Service: " + repositoryService);
        System.out.println("Task Service: " + taskService);
        System.out.println("Management Service: " + managementService);
        System.out.println("Identity Service: " + identityService);
        System.out.println("History Service: " + historyService);
        System.out.println("Form Service: " + formService);
        System.out.println("Dynamic BPMN Service: " + dynamicBpmnService);
    }
  1. RuntimeService: 提供了与运行时流程实例相关的服务,如启动流程实例、查询任务等。

  2. RepositoryService: 提供了与流程定义仓库相关的服务,如部署、查询和删除流程定义等。

  3. TaskService: 提供了与任务相关的服务,如查询、完成和委托任务等。

  4. ManagementService: 提供了与引擎管理相关的服务,如查询引擎表和作业等。

  5. IdentityService: 提供了与用户和组相关的服务,如创建、查询和删除用户等。

  6. HistoryService: 提供了与历史数据相关的服务,如查询流程实例历史、任务历史等。

  7. FormService: 提供了与表单相关的服务,如提交表单和获取表单数据等。

  8. DynamicBpmnService: 提供了与动态BPMN相关的服务,如修改流程定义的BPMN XML等。

3.图标

事件图标

在Flowable中的事件图标启动事件边界事件中间事件结束事件
在这里插入图片描述

  1. 启动事件(Start Event):

    • 定义: 启动事件是流程实例的开始点。在 Flowable 中,启动事件用于指示何时开始一个新的流程实例。
    • 用法: 一个流程通常从一个启动事件开始。Flowable 支持不同类型的启动事件,如消息启动、定时启动、信号启动等,具体取决于流程的需要。
  2. 边界事件(Boundary Event):

    • 定义: 边界事件与某个任务或子流程关联,它们位于这些任务或子流程的边界上。当特定条件满足时,边界事件可以中断或补充当前任务的执行。
    • 用法: 用于在任务执行期间处理特定的中断条件或补充行为。边界事件通常与定时器、消息、错误等事件类型关联。
  3. 中间事件(Intermediate Event):

    • 定义: 中间事件用于在流程执行的中间插入某些操作或等待某些条件的发生。它们不是流程的开始或结束点,而是流程执行过程中的事件点。
    • 用法: 用于捕捉某些事件、执行某些操作或等待某些条件。中间事件可以与定时器、消息、信号等事件类型关联。
  4. 结束事件(End Event):

    • 定义: 结束事件是流程实例的结束点。在 Flowable 中,结束事件用于指示何时结束一个流程实例。
    • 用法: 一个流程通常以一个结束事件结束。Flowable 支持不同类型的结束事件,如消息结束、信号结束等,具体取决于流程的需要。

活动(任务)图标

在这里插入图片描述
在 Flowable 中,活动(Activity)或任务(Task)是流程中的执行单元,代表了工作流程中的一个步骤或操作。活动可以是用户任务、自动任务、服务任务等,它们在流程中定义了工作的具体内容。

结构图标

在这里插入图片描述
结构图标可以看做是整个流程活动的结构,一个流程中可以包括子流程。

网关图标

网关用来处理决策
在这里插入图片描述

4.部署流程

    /**
     *部署流程
     */
    @Test
    public void testDeploy(){
        // 1.获取 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 3.完成流程的部署操作
        Deployment deploy = repositoryService.createDeployment()// 创建Deployment对象
                .addClasspathResource("myProcess.bpmn20.xml") // 添加流程部署文件
                .name("请假流程") // 设置部署流程的名称
                .deploy(); // 执行部署操作
        System.out.println("deploy.getId() = " + deploy.getId());
        System.out.println("deploy.getName() = " + deploy.getName());
    }

5.流程定义挂起和激活

  • 部署的流程默认的状态为激活
  • 如果我们暂时不想使用该定义的流程,那么可以挂起该流程。
  • 流程定义为挂起状态,该流程定义将不允许启动新的流程实例,同时该流程定义下的所有的流程实例都将全部挂起暂停执行。
    /**
     * 流程定义挂起和激活
     */
    @Test
    public void testProcessDefinitionActivateAndSuspend() {
        // 获取流程引擎对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionId("myProcess:5:155004")
                .singleResult();
        // 获取流程定义的状态
        boolean suspended = processDefinition.isSuspended();
        System.out.println("suspended = " + suspended);
        if (suspended) {
            // 表示被挂起
            System.out.println("激活流程定义");
            repositoryService.activateProcessDefinitionById("myProcess:5:155004", true, null);
        } else {
            // 表示激活状态
            System.out.println("挂起流程");
            repositoryService.suspendProcessDefinitionById("myProcess:5:155004", true, null);
        }
    }

6.启动流程实例

    /**
     * 启动流程实例
     */
    @Test
    public void testRunProcess(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        // 我们需要通过RuntimeService来启动流程实例
        RuntimeService runtimeService = processEngine.getRuntimeService();

        // 启动流程实例
        ProcessInstance holidayRequest = runtimeService.startProcessInstanceById("myProcess:5:155004"); //从库中act_re_procdef表查看该值
        System.out.println("holidayRequest.getProcessDefinitionId() = " + holidayRequest.getProcessDefinitionId());
        System.out.println("holidayRequest.getActivityId() = " + holidayRequest.getActivityId());
        System.out.println("holidayRequest.getId() = " + holidayRequest.getId());
    }

7.流程实例挂起和激活

    /**
     * 流程实例挂起和激活
     */
    @Test
    public void testProcessInstanceActivateAndSuspend() {
        // 1.获取ProcessEngine对象
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RuntimeService
        RuntimeService runtimeService = engine.getRuntimeService();
        // 3.获取流程实例对象
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("162501")
                .singleResult();
        // 4.获取相关的状态操作
        boolean suspended = processInstance.isSuspended();
        String id = processInstance.getId();
        if (suspended) {
            // 挂起--》激活
            runtimeService.activateProcessInstanceById(id);
            System.out.println("流程实例:" + id + ",已激活");
        } else {
            // 激活--》挂起
            runtimeService.suspendProcessInstanceById(id);
            System.out.println("流程实例:" + id + ",已挂起");
        }
    }

8.执行任务

    /**
     * 完成zhangsan当前任务
     */
    @Test
    public void testCompleteTask(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        List<Task> list = taskService.createTaskQuery()
                .processDefinitionKey("myProcess")
                .taskAssignee("zhangsan")
                .list();

        for (Task task : list) {
            // 完成任务
            taskService.complete(task.getId());
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网安入门12-文件上传(黑白名单,00截断)

黑名单绕过 Pass-03 有的时候后端限制了一些黑名单&#xff0c;比如过滤后缀名.php 我们就可以用黑名单里没有的后缀名进行绕过&#xff0c;例如&#xff1a; 大小写&#xff1a;.phP .pHp .AsPphp1 .php2 .php3 .php9 .phtml&#xff08;成功率较高&#xff09;特殊文件名绕…

TypeScript基础(三)扩展类型-接口和类型兼容性

✨ 专栏介绍 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript通过添加静态类型和其他特性来增强JavaScript&#xff0c;使其更适合大型项目和团队开发。 在TypeS…

一文详解VScode 的远程开发

VS code登录服务器后进行编码和调试&#xff0c;VS code上的所有功能都可以使用&#xff0c;和在本地开发基本无区别。 一、配置免密远程登录 因为是要远程登录&#xff0c;那么需要通过使用ssh进行密钥对登录&#xff0c;这样每次登录服务器就可以不用输入密码了。 先来一句官…

【复习】人工智能 第2章 知识表示

一、 知识的概念 &#xff08;1&#xff09;知识&#xff1a;把有关信息关联在一起所形成的信息结构。 注&#xff1a;事实与规则的区别&#xff1a; 事实 —— “雪是白色的” 大自然自带的 规则 —— “如果头痛且流涕&#xff0c;则有可能患了感冒” 有点推理意味的 &…

服务器监控软件夜莺使用(二)

文章目录 一、采集器安装1. Categraf简介2. Categraf部署3. 测试服务器部署4. 系统监控插件5. 显卡监控插件6. 服务监控插件 二、监控仪表盘1. 机器列表2. 系统监控3. 服务监控 三、告警配置1. 邮件通知2. 告警规则3. 告警自愈 一、采集器安装 1. Categraf简介 Categraf 需要…

QTableView和QTableWidget之间的联系 和 区别?什么时候该用QTableView,什么时候该用QTableWidget?

参考&#xff1a;tableview与tablewidget的区别_wx64f5321a2db60的技术博客_51CTO博客 QTableView 和 QTableWidget 是 Qt 中用于显示和编辑表格数据的两个不同的部件&#xff0c;它们之间存在一些重要的区别&#xff1a; 一、主要区别是&#xff1a;QTableView可以使用自定义…

拥有影响力,项目经理才能如鱼得水

优秀的项目经理&#xff0c;不仅需要具备卓越的组织和协调能力&#xff0c;还需要拥有足够的影响力&#xff0c;以便能够推动项目的顺利进行。然而&#xff0c;现实情况是&#xff0c;许多项目经理并没有意识到影响力的重要性&#xff0c;导致他们在工作中事半功倍&#xff0c;…

中国建设银行 关于解决微软升级导致插入网银盾无法自动打开企业网银的通知

关于解决微软升级导致插入网银盾无法自动打开企业网银的通知 发布时间&#xff1a;2023-10-18 尊敬的客户&#xff1a; 近期Windows操作系统升级会禁止使用IE浏览器&#xff0c;可能会导致您在插入网银盾后无法自动弹出企业网银登录页面&#xff0c;您可以通过以下方式解决&…

一篇文章带您了解如何实现WordPress主题/插件本地化翻译

要实现WordPress主题和插件的本地化翻译就需要了解什么是国际化和本地化以及WordPress是如何实现国际化和本地化的。 什么是国际化&#xff1f; 国际化是为软件&#xff08;在本例中为 WordPress&#xff09;提供多语言支持的过程。国际化通常缩写为 i18n&#xff0c;其中 18 代…

Zoho Mail企业邮箱:跨境协作的利器,荣登Top榜单

在全球化的商业环境中&#xff0c;高效的协作工具对于企业及个人来说都至关重要。邮件因其自身规格正式、全球通用等特点&#xff0c;在跨境通信场景中仍然是最高频使用的工具之一。 Zoho Mail企业邮箱因邮件抵达率高&#xff0c;数据加密严&#xff0c;纯净无广告&#xff0c;…

数据分析求职-常见面试题前言

今天和大家聊聊数据分析求职常见面试题&#xff0c;这是这个系列的第一篇文章&#xff0c;但是我不想开始就直接罗列题目&#xff0c;因为这样的文章实在太多了&#xff0c;同学们的兴趣程度肯定一般。所以&#xff0c;我想先和大家聊聊在准备面试题时候通常遇到的困扰&#xf…

京东年度数据报告-2023全年度打印机十大热门品牌销量(销额)榜单

2023年度&#xff0c;打印机消费市场的销售总量呈现下滑。根据鲸参谋平台的数据显示&#xff0c;京东平台上打印机市场的年度销量为650万&#xff0c;同比下滑约9%&#xff1b;销售额将近55亿&#xff0c;同比下滑约10%。 在这里&#xff0c;鲸参谋平台综合了京东平台上电脑办公…

第17集《佛法修学概要》

戊四、业果轻重 诸位法师慈悲&#xff01;陈会长慈悲&#xff01; 诸位学员&#xff01;阿弥陀佛&#xff01; 请大家打开讲义第四十二页。 我们讲到戊四、业果轻重。业果的轻重有三段&#xff1a;第一个约心&#xff1b;第二个约境&#xff1b;第三个约相续。我们讲到第二…

Vue3+Vite打包跨平台(七牛、阿里OSS)上传部署前端项目

1、业务场景 阅读之前&#xff0c;想了解一下各位观众老爷们&#xff0c;你们公司的项目是怎么部署的&#xff1a; 1.本地打包手动上传服务器&#xff1b; 2.本地打包自动上传服务器&#xff1b; 3.代码仓库流水线自动构建&#xff1b; 4.其他…&#xff1b; 我们用的第3种部…

认知能力测验,⑦如何破解类比推理类测试题?

关于认知能力测评&#xff0c;今天这稿算是最后一篇&#xff0c;一共写了7篇&#xff0c;分别是数字推理、逻辑思维、语言常识、数量关系、图形推理、逻辑判断、和类比推理。 不论是校招、社招、网申、还是行测&#xff0c;在线人才测评已经是普遍普及的想象&#xff0c;而认知…

BUUCTF--ciscn_2019_s_31

这题是一题ret2csu,先查看下保护&#xff1a; 64位架构的程序&#xff0c;那么传参就是寄存器传参了。开启了NX&#xff0c;也不存在ret2shellocde。接下来黑盒测试下&#xff1a; 输入一个字节都能触发段错误&#xff0c;并且还跟了一串不知道啥来的东西&#xff0c;盲猜是栈上…

HTML5+CSS3小实例:弹出式悬停效果

实例:弹出式悬停效果 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><m…

[Markdown] Markdown常用快捷键分类汇总

文章目录 Markdown1、标题2、列表3、强调4、链接和图片5、代码和公式6、表格和任务列表7、引用8、分割线9、脚注10、目录11、注释12、定义 Markdown Markdown是一种轻量级的标记语言&#xff0c;可以让你用简单的语法来编写格式丰富的文档。 Markdown编辑器是一种专门用于编辑…

c++学习:文件输入输出类模板

目录 头文件 常用类模板 basic_ifstream文件输入类模板 模板原型 模板的成员类型和成员对象和成员函数 文件输入类模板的容器对象 实例 basic_ifstream文件输出类模板 模板原型 模板的成员类型和成员对象和成员函数 实例 basic_ifstream文件输出类模板 模板原型 …

Certum与Geotrust的SSL证书区别

Certum和GeoTrust都是知名的CA认证机构&#xff0c;这两个品牌下的SSL证书在多个方面存在一些差异。今天就随SSL盾小编了解Certum与Geotrust证书的区别。 一、Certum机构背景 Certum是波兰的一家CA认证机构&#xff0c;成立于2002年&#xff0c;至今已有近20多年的历史。旗下有…