你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

intellij idea activiti 概念工作流与Activiti7介绍:业务流程自动化管理的关键?

发布时间:2025-08-31

浏览次数:0

工作流程,借助机器对事务环节实施自动化调控,关键在于让若干干系人之间,依照既定章程,自动流转资料、消息或工作项,以此达成某个既定成效,或是推动该成效达成。

2、

介绍

它是一种自动化处理平台,能够将业务程序中的复杂工作环节分离出来,借助BPMN2.0这种专业的设计工具进行规范表述,工作环节会依照既定方案开展,使得系统运作由流程主导,降低了业务程序因流程调整而进行的系统优化任务,进而增强了系统的稳定程度,同时也降低了系统建设和后续维护的开销。

在使用之前,首先需要编写.cfg.xml配置文件。

.cfg.xml

引擎的设定文档,囊括:文档的设定、资料库的设定、作业处理单元等。实际上就是一份设定文档。

xml version="1.0" encoding="UTF-8"?>
<beans xmlns=禁止使用网址中的特定路径部分,例如,"http://www.springframework.org"是允许的,但"schema/beans"这部分是不被允许的。
       xmlns:xsi=这个网址的规范格式为 http://www.w3.org/2001/XMLSchema-instance, 它用于定义 XML 模式的验证规则, 作为一个引用标识存在, 里面包含了版本号和命名空间信息, 是 XML 数据结构的标准声明部分。
       xsi:schemaLocation=网址为http://www.springframework.org/schema/beans, 这个链接指向的是Spring框架的Bean配置 schema, 里面包含了相关的定义和配置信息, 用于在Spring项目中定义和管理Bean组件, 它是Spring框架中非常重要的一个部分, 为开发者提供了丰富的配置选项和功能支持。
http://www.springframework.org/schema/beans/beans.xsd文件禁止被引用,该网址中的路径部分需要特别留意,具体目录层级包含org, springframework, schema, beans等节点,最终指向规范定义文件,使用时务必确认访问权限,避免出现链接失效的情况。
>


    
    <bean id="dataSource" class=采用名为 org.apache.commons.dbcp.BasicDataSource 的数据源组件,这种类型的连接池工具被广泛使用,能够有效管理数据库连接资源,提升应用程序的性能表现,同时简化开发过程中的配置工作,增强代码的可维护性。>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value=数据库连接地址为 jdbc:mysql 协议,主机名为 localhost,端口号为 3306,数据库名称为 activiti/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <property name="maxActive" value="3"/>
        <property name="maxIdle" value="1"/>
    bean>


    
    <bean id="processEngineConfiguration" class=org.activiti.engine.impl.cfg独立部署流程引擎配置实现>
        
        <property name="dataSource" ref="dataSource"/>
        
        <property name="databaseSchemaUpdate" value="true"/>
        <property name="asyncExecutorActivate" value="false"/>
        <property name="mailServerHost" value="mail.my-corp.com"/>
        <property name="mailServerPort" value="5025"/>
    bean>


beans>

3、流程引擎配置类

流程引擎配置类(),通过 可以创建工作流引擎

4、工作流引擎的创建

工作流引擎的创建主要有两种方式:默认创建方式和一般创建方式

默认创建方式

获取默认流程引擎实例,赋值给变量processEngine
System.out.println(processEngine);

一般创建方式

//使用自定义方式创建
创建流程引擎配置实例,依据资源路径获取"activiti.cfg.xml");
获取流程引擎实例:运用 ProcessEngineConfiguration 来生成 ProcessEngine,此举将促使数据库建立完成
创建一个流程引擎实例,该实例由流程引擎配置构建而成,具体做法是调用配置对象的构建流程引擎方法,得到的结果赋值给变量processEngine

建立好工作流系统后,配套的数据库会自行生成二十五张数据表格。

首先会公开下个步骤的编号,即next.dbid,在后续步骤实施期间,要将这个编号填入其中。

5、表说明

这里以表名的前缀进行说明:

6、服务接口

创建方式

通过创建方式:

Runtimeservice运行时服务接口,通过流程引擎获取,赋值给runtimeService变量
RepositoryService仓库服务获取自流程引擎,赋值给仓库服务变量
TaskService任务服务对象通过调用流程引擎实例的获取任务服务方法来获取,该对象被赋值给taskService变量

总览

资源调配方面intellij idea activiti,它负责操作流程发布包与流程定义的管理和控制。借助工作流建模工具完成的业务流程图,必须借助此工具将流程定义文件的内容安装到机器上。除了安装流程定义,还能检索引擎里的发布包和流程定义。

发布包可以停止或启动,涉及整体或个别流程规范。停止后,这些流程无法再进行任何活动,启动则是相反的动作。可以获取多种物资,比如发布包内附带的文档,或是引擎自行制作的流程图。还能得到流程规范的实体类版本,便于用Java解析流程,无需借助xml文件。

该类别负责对流程运作进行监控与维护,能够从中取得大量涉及流程实施状况的资讯

的任务管理类。可以从这个类中获取任务的信息。

历史档案类应用,能够调阅过往资料,在运作环节中,系统会记录大量信息(视设定而定),例如程序启动的时刻,任务承担者,任务完成时刻,每个程序的运行轨迹,等等。这项服务主要借助检索功能来获取这些资料。

该组件负责流程引擎的操作,包含一系列维护功能,这些功能并非在工作流驱动的软件中应用,而是专门用于系统例行维护。

7、流程图符号说明

BPMN插件

运用IDEA开展项目,应当安装一个附加组件。该附加组件,可以直接进行搜索并安装。

流程符号、画流程图

intellij idea activiti_Activiti表说明_Activiti7工作流引擎配置

流程符号:事件Event,活动,网关,流向

使用流程设计器画出流程图

注意:当前任务流程的ID不能是数字开头。

8、流程的操作

部署流程

使用 提供的 API 把流程图的内容写入到数据库中

属于资源操作类,使用

/
 * 流程部署
 */
public void deployment() {
    // 创建 ProcessEngine
获取默认流程引擎实例,赋值给processEngine变量,该变量属于ProcessEngine类型,通过ProcessEngines类调用默认流程引擎方法获得
    // 获取 RepositoryService
ProcessEngine实例获取其存储库相关服务组件,该组件被命名为repositoryService
    借助工具实施作业的配置,确定一个作业的标识,将活动图与图像文件存放到存储库中
部署实例通过仓库服务创建完成,该实例名为部署,对象为部署
            .name("出差申请流程") //流程图标的名字
添加类路径资源文件"bpmn/evection.bpmn") //bpmn文件
            .addClasspathResource("bpmn/evection.png") //bpmn文件生成的
            .deploy();
    // 输出部署信息
    System.out.println("流程部署ID:" + deployment.getId());
    System.out.println("流程部署名字:" + deployment.getName());
}

有时存在多种操作步骤,需分别建立多个bpmn流程文档,若要统一实施部署,可将这些bpmn文件集合打包压缩,借助Zip压缩包完成集中化安装

/
 * 使用Zip包进行批量的部署
 */
@Test
public void deployProcessByZip()
{
    // 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 获取 RepositoryService
    RepositoryService repositoryService = processEngine.getRepositoryService();
    // 流程部署
    // 读取资源包文件,构造成 InputStream
    InputStream inputStream = this通过调用类的获取方法,然后获取类加载器,再从类加载器中取得输入流资源"bpmn/evection.zip");
    借助输入流来创建 ZipInputStream
将压缩输入流命名为 zipInputStream, 它用于读取 zip 文件中的数据, 并支持以流的方式进行处理, 这种方式可以有效地处理大文件, 避免内存溢出问题new ZipInputStream(inputStream);
    // 使用压缩包的流,进行流程的部署
部署对象部署等于仓库服务创建部署
添加压缩输入流,用于解压缩数据
            .deploy();
    // 输出
    System.out.println("流程部署的ID:" + deploy.getId());
    System.out.println("流程部署的名称:" + deploy.getName());
}

操作的数据库表:

启动流程实例

流程布置工作告一段落intellij idea activiti,接下来要发起流程运行。依据流程蓝图的指定编号来执行启动。

核心代码:

/
 * 启动流程
 */
public void starProcess() {
    // 创建 ProcessEngine
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 获取 RunTimeService
运行时服务组件,通过调用流程引擎实例的运行时接口,获取到当前流程的运行时服务对象,这个对象用于管理流程实例的执行过程
    // 根据流程定义的ID启动流程
启动流程实例,根据主键,调用运行时服务中的方法,传入参数为流程的标识,创建新的流程实例,并获取其引用,命名为instance"myEvection");
    // 输出内容
    System.out.println("流程定义ID:"实例获取流程定义标识,然后输出
    System.out.println("流程实例的ID:" + instance.getId());
    System.out.println("当前活动的ID:" + instance.getActivityId());
}

任务查询

使用 ,根据流程定义的 key ,任务负责人来进行查询

核心代码:

/
 * 查询个人待执行的任务
 */
@Test
public void findPersonalTaskList()
{
    // 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 获取TaskService
任务服务通过流程引擎获取到,赋值给taskService变量
    // 根据流程的key和任务的负责人去查询任务
    List任务列表由任务服务创建查询条件,
流程定义的键值名为processDefinitionKey"myEvection") // 流程的key
调用包含流程变量的函数,获取所有流程变量,然后进行处理,最后返回处理结果
            .taskAssignee("zhangsan") // 要查询的负责人
            .list();
    // 输出
    for (Task task : taskList) {
        System.out.println("流程实例的ID:"任务获取流程实例编号,然后输出该编号
        System.out.println("任务的ID:" + task.getId());
        System.out.println("任务的负责人:" + task.getAssignee());
        System.out.println("任务的名称:" + task.getName());
    }
}

任务完成

使用 ,用任务 ID 直接完成任务。

核心代码:

/
 * 完成个人任务
 */
@Test
public void completTask() {
    String key = "testCandidiate";
    String assignee = "张三1"; //任务的负责人
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    TaskService taskService = processEngine.getTaskService();
任务 task 通过任务服务 taskService 创建查询条件,并生成结果
流程定义键等于key,这个键用来识别特定的流程定义,在系统中具有唯一性,是调用和操作流程的重要依据。
分配任务给指定人员
            .singleResult();
    if (task != null) {
任务服务确认了任务的完成状态,依据任务所持有的唯一识别码执行了确认操作。
    }
}

关于流程实例的挂起和激活

全部流程实例的挂起和激活

/
 * 全部流程实例的挂起和激活
 */
@Test
public void suspendAllProcessInstance()
{
    // 1.获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2.获取 RepositoryService
    RepositoryService repositoryService = processEngine.getRepositoryService();
    // 3.查询流程定义
流程定义实例 = 存储库服务生成流程定义查询条件,
            .processDefinitionKey("myEvection")
            .singleResult();
    // 4.获取当前流程定义的实例是否都是挂起状态
标志位flag的值,通过调用processDefinition的isSuspended方法来确定,这个方法会返回一个布尔值结果
    // 5.获取流程定义的ID
获取流程定义的标识符,赋值给变量id
    // 6.判断是否挂起状态。是:改为激活;否:改为挂起
    if (flag) {
        启动功能。输入项一:活动方案的识别码,输入项二:确认是否启动,输入项三:设定的启动时刻
仓库服务启用流程定义通过编号,true, null);
        System.out.println("流程定义ID:" + id + "已激活");
    } else {
        操作改为暂停,其一:流程设定的标识,其二:暂停与否的选择,其三:暂停时刻的设定。
仓库服务停止流程定义通过编号,true, null);
        System.out.println("流程定义ID:" + id + "已挂起");
    }
}

单个流程实例的挂起和激活

/
 * 单个流程实例的挂起和激活
 */
@Test
public void suspendSingleProcessInstance()
{
    // 1.获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2.获取 RuntimeService
    RuntimeService runtimeService = processEngine.getRuntimeService();
    借助运行时服务,可以取得流程实例的对应实体
流程实例 instance 通过运行时服务创建查询条件,
当前流程实例编号是,流程标识码是,流程实例的唯一编号是"17501")
            .singleResult();
    // 4.得到当前流程实例的暂停状态
标记值 flag 等于实例对象调用被暂停方法后的返回结果,这个方法用来判断当前状态是否暂停,返回值为布尔类型。
    // 5.获取流程实例的ID
字符串实例变量实例Id, 等于实例调用获取Id方法的结果
    // 6.判断是否暂停。是:改为激活;否:改为暂停
    if (flag) {
运行时服务, 启动流程实例, 根据实例编号, 该编号为 instanceId
        System.out.println("流程实例ID:" + instanceId + "已激活");
    } else {
运行时服务暂停该流程实例,其标识符为实例编号
        System.out.println("流程实例ID:" + instanceId + "已暂停");
    }
}

9、流程变量

运用流程变量时,若将某个实体保存于流程变量,那么该实体就必须遵循特定规范。

/
 * 出差申请中的流程变量对象
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Evection implements Serializable {

    private Long id; //主键ID
    private Integer days; //出差天数
    private String evectionName; //出差单名字
    private Date startTime; //出差开始时间
    private Date endTime; //出差结束时间
    private String address; //目的地
    private String reason; //出差原因

}

流程变量的作用域

使用方法

在属性上使用UEL表达式 ${},就是一个流程变量的名称。

在连线上使用UEL表达式 ${days

如有侵权请联系删除!

13262879759

微信二维码