Activiti7-基础(SpringBoot 2.6版)

news/2024/5/20 5:19:38 标签: activity7

Activiti7流程引擎 – 基础篇

说到审批,就一定会有流程又称工作流(Workflow)。例如 开始 -> 申请 -> 主管审批 -> 人事审批 -> 结束,就是一个简单业务审批流程,按照某种预定义的规则传递文档、信息或任务的过程,通俗的说流程就是多种业务对象在一起合作完成某件事情的步骤。而在计算机体系中为了把步骤变成计算机能理解的形式就衍生出了流程引擎!在复杂多变的业务场景下,流程引擎能保证我们业务执行的准确性,大大降低我们设计业务的成本,因此市面也出现了Osworkflow、BPM、Activiti、flowable、Camunda等功能强大的流程引擎被各行各业的计算机应用所利用。

在没有专门的工作流引擎之前,我们之前为了实现流程控制,通常的做法就是采用状态字段的值来跟踪流程的变化情况。这样不用角色的用户,通过状态字段的取值来决定记录是否显示。

针对有权限可以查看的记录,当前用户根据自己的角色来决定审批是否合格的操作。如果合格将状态字段设置一个值,来代表合格;当然如果不合格也需要设置一个值来代表不合格的情况。

这是一种最为原始的方式。通过状态字段虽然做到了流程控制,但是当我们的流程发生变更的时候,这种方式所编写的代码也要进行调整。

那么有没有专业的方式来实现流程的管理呢?并且可以做到业务流程变化之后,我们的程序也可以不用改变,依然能自动化的控制流程?答案就是:流程引擎。

本篇文章以开源的Activiti流程引擎来介绍如何通过计算机技术对业务流程进行自动化的管理,高效准确的完成某种作业!为什么选Activiti ?

常见开源流程引擎对比:

技术组成ActivitijBPM5
数据库持久层ORMMyBatis3Hibernate3
持久化标准JPA规范
事务管理MyBatis机制/Spring事务控制Bitronix,基于JTA事务管理
数据库连接方式Jdbc/DataSourceJdbc/DataSource
支持数据库Oracle、SQL Server、MySQL等多数数据库Oracle、SQL Server、MySQL等多数数据库
设计模式Command模式、观察者模式等
内部服务通讯Service间通过API调用O基于Apache Mina异步通讯
集成接口SOAP、Mule、RESTful消息通讯
支持的流程格式BPMN2、xPDL、jPDL等目前仅只支持BPMN2 xml
引擎核心PVM(流程虚拟机)Drools
技术前身jBPM3、jBPM4Drools Flow
所属公司AlfrescojBoss.org

ActivitiJava实现了工业领域BPMN2.0的规范标准框架,老牌、成熟稳定且目前用户众多、社区活跃、趋势较好(使用越来越多)、易于上手,基于Spring、MyBatis常用互联网技术堆栈。(原文链接:https://javaforall.cn/125263.html)

在这里插入图片描述

官网地址:https://www.activiti.org/

1、流程引擎

1.1、流程引擎的定义

多种业务对象在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是流程引擎。

1.2、流程引擎系统

流程引擎系统(Process Engine System)是一个软件系统,它完成流程的定义和管理,并按照在系统中预先定义好的流程规则进行流程实例的执行。流程引擎系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

流程引擎总是以任务(Task)的形式驱动人处理业务或者驱动业务系统自动完成作业。有了流程引擎之后,我们不必一直等待其他人的工作进度,直白地说,我们只需要关心系统首页的待办任务数即可,由系统提醒当前有多少待办任务需要处理。因此可以自动化实现流程的管理。

1.3、流程引擎的应用

流程引擎应用广泛,在由流程驱动的各种系统中都有应用,例如OA、CRM、ERP、ECM、BI等。在企业应用中还有很多产品或平台集成流程引擎,用来处理系统运行过程中发起的业务流程。

具体应用:

  1. 关键业务流程:订单. 报价处理. 合同审核. 客户电话处理. 供应链管理等

  2. 行政管理类:出差申请. 加班申请. 请假申请. 用车申请. 各种办公用品申请. 购买申请. 日报周报等凡是原来手工流转处理的行政表单。

  3. 人事管理类:员工培训安排. 绩效考评. 职位变动处理. 员工档案信息管理等。

  4. 财务相关类:付款请求. 应收款处理. 日常报销处理. 出差报销. 预算和计划申请等。

  5. 客户服务类:客户信息管理. 客户投诉. 请求处理. 售后服务管理等。

  6. 特殊服务类:ISO系列对应流程. 质量管理对应流程. 产品数据信息管理. 贸易公司报关处理. 物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范地实施。

2、Activiti7概述

2.1、Activiti概述

Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens也是JBoss jBPM的项目架构师。

Activiti是一个工作流引擎, Activit可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由Activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。

2.2、BPM软件

BPM(Business Process Management),即业务流程管理,是一种规范化的构造端到端的业务流程,以持续的提高组织业务效率。常见商业管理教育如EMBA、MBA等均将BPM包含在内。

有了BPM规范后,相应的BPM软件也就诞生,BPM就是根据企业中业务环境的变化,推进人与人之间、人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具。通过BPM软件对企业内部及外部的业务流程的整个生命周期进行建模、自动化、管理监控和优化,使企业成本降低,利润得以大幅提升。

BPM软件在企业中应用领域广泛,凡是有业务流程的地方都可以BPM软件进行管理,比如企业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。

2.3、BPMN

BPMN(Business Process Model AndNotation)业务流程模型和符号是由BPMI(BusinessProcess Management Initiative)开发的一套标准的业务流程建模符号,使用BPMN提供的符号可以创建业务流程。

2004年5月发布了BPMN1.0规范.BPMI于2005年9月并入OMG(The Object Management Group对象管理组织)组织。OMG于2011年1月发布BPMN2.0的最终版本。

BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准。Activiti就是使用 BPMN 2.0 进行流程建模、流程执行管理,它包括很多的建模符号,比如:

圆圈代表Event(流程中运行过程中发生的事情),包括开始事件和结束事件。

在这里插入图片描述

活动用圆角矩形表示,一个流程由一个活动或多个活动组成。如上图所有元素组成一个.bpmn文件,称为业务流程模型。Bpmn图形其实是通过xml表示业务流程,使用文本编辑器打开或导出得到就是一个xml文件。

2.4、SpringBoot集成Activiti7

所谓的流程引擎其实就是一堆非常完善的jar包API,业务系统访问(操作)Activiti的接口,就可以方便的操作流程相关数据,这样就可以把工作流环境与业务系统的环境集成在一起。因此要想学习这些API,我们必须搭建Activiti7学习环境。

Activiti运行需要有数据库的支持,支持的数据库有:h2、mysql、oracle、postgres、mssql、db2等。因此事先需要准备好一个数据库环境。

1、使用SpringBoot初始化向导创建一个工程(版本我们选择2.6.12),并添加如下maven依赖(activiti也选择最新版本),暂时先引入这些依赖,后面需要什么再引入什么即可。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.laizhenghua</groupId>
    <artifactId>activity</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>activity</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring-boot-starter -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.1.0.M6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


http://www.niftyadmin.cn/n/2049.html

相关文章

【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs

文章目录前言一、创建项目1. 创建服务端项目2. 创建客户端项目二、编写测试代码1.服务端2.客户端三、 运行效果总结完整代码服务端客户端前言 ws-rs实现了MIO的WebSockets RFC6455标准。它允许在单个线程上处理多个连接&#xff0c;甚至可以在同一线程上生成新的客户端连接。这…

HTML5期末作业:明星网站设计与实现——明星薛之谦介绍网页设计7个页面HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

学习docker记录(二)

查看命令 输入docker image或者 docker container 可以出现对应的命令&#xff1a; 也可以输入docker --help查看。 操作镜像 首先拉取镜像 执行docker pull docker.io/library/ubuntu:18.04命令或者docker pull ubuntu:18.04&#xff0c;因为是从docker hub拉取ubunto官方…

python实现自动检测核酸用码记录 ---- 自动化办公小技巧(摸鱼利器)

自动检测核酸用码记录&#x1f947;预备知识✈️os库os.path.exists()os.mkdir()os.remove()os.listdir()&#x1f47d;Python 3 查看字符编码方法⏰python3获取当前系统时间&#x1f424;读取图片&#xff0c;保存到指定目录&#x1f47c;将数据保存到csv文件中&#x1f948;p…

【Linux】Linux中的gcc/g++编译器的使用

&#x1f4ac;推荐一款模拟面试、刷题神器 、从基础到大厂面试题&#xff1a;&#x1f449;点击跳转刷题网站进行注册学习 目录 一、编译的过程 1、预处理阶段 1.1预处理的工作——头文件展开、去注释、宏替换、条件编译 1.2外部定义宏&#xff08;-D选项&#xff09; 1.…

什么是柔性数组

本期介绍&#x1f356; 主要介绍&#xff1a;什么是柔性数组&#xff0c;使用柔性数组的前提条件有哪些&#xff0c;柔性数组的特点是什么&#xff0c;柔性数组相较于一般实现有哪些优点&#x1f440;。 柔性数组是一种动态可变的数组&#xff0c;也许你从来没有听说过这个概念…

<Linux系统复习>文件系统的理解

一、本章重点 1、磁盘的物理结构 2、磁盘文件如何存储&#xff1f; 3、目录的理解 4、创建一个文件做了什么&#xff1f; 5、删除一个文件做了什么&#xff1f; 6、软连接 7、硬链接 01 磁盘的物理结构 磁盘是硬件结构唯一的机械设备&#xff0c;它通过磁头来进行磁盘的读写&am…

Python实现秒杀抢购某宝商品,不再害怕双十一抢不到了

前言 马上就要双十一咯&#xff0c;给你们展示一下我在618干的大事&#xff0c;直接用Python抢购商品 今天就来分享给你们吧 这又快要到付尾款的日子咯&#xff0c;有些哥们需要送礼物给对象的&#xff0c;赶紧买这些预售的商品吧&#xff0c;听说今年预售的商品是要比现货便…