三分钟明白 Activity工作流 -- java运用
一、 什么是工作流
以请假为例,现在大多数公司的请假流程是这样的
员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑
采用工作流技术的公司的请假流程是这样的
员工使用账户登录系统——点击请假——上级登录系统点击允许
就这样,一个请假流程就结束了
有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案是,用的。但是这一切的工作都会在上级点击允许后自动运行!
这就是工作流技术。
Georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完

二、 工作流技术的优点
从上面的例子,很容易看出
工作流系统,实现了工作流程的自动化,提高了企业运营效率、改善企业资源利用、提高企业运作的灵活性和适应性、提高量化考核业务处理的效率、减少浪费(时间就是金钱)。
而手工处理工作流程,一方面无法对整个流程状况进行有效跟踪、了解,另一方面难免会出现人为的失误和时间上的延时导致效率低下,特别是无法进行量化统计,不利于查询、报表及绩效评估。
三、 Java开发者会为什么要学Activity工作流
在Java领域,JBPM和Activity是两个主流的工作流系统,而Activity的出现无疑将会取代JBPM(Activity的开发者就是从Jbpm开发者出来的)。
四、 Activity工作流学习要点
1. 1个插件
在Eclipse中安装Activity插件,让你可以在Eclipse中绘制Activity工作流图
2. 1个引擎
ProcessEngine对象,Activity工作流引擎。这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
所有的操作都是从获取引擎开始的,所以一般会把引擎作为全局变量
ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
3. 1个配置文件
activiti.cfg.xml。Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数
4. 5种数据库表
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例,变量,任务等等。
ACT_GE_*: 通用数据,用于不同场景下,如存放资源文件。
5. 23张表
不同的表存放不同方面的数据,有流程定义表、任务结点表、流程变量表、任务历史表等等。

6. 5项Service
不同的Service类对应不同的功能。
比如TaskService,是activiti的任务服务类。可以从这个类中获取任务的信息。
而HistoryService,则是activiti的查询历史信息的类。在一个流程执行完成后,这个对象为我们提供查询历史信息。
7. 7项基本操作
设计流程图(各种组件,如连线、用户任务、网关)
流程定义增删改查
流程变量增删改查
启动流程定义
任务增删改查
完成任务
历史信息查询
学习7项基本操作时只需在JavaSE下执行即可,当然,做web项目的时候就要考虑和SSH等开发框架结合的问题。当然,只有基本操作学会了,综合开发并不难。
自我总结: ### Activity 工作流概述 Activity 一般指 Activiti,它是一个开源的工作流引擎,基于 Java 开发,用于创建、执行和管理业务流程。它遵循 BPMN 2.0(Business Process Model and Notation 2.0)标准,允许开发者以图形化的方式设计业务流程,然后通过代码来执行这些流程。
运用步骤及示例
1. 添加依赖
如果你使用 Maven 项目,在 pom.xml 中添加 Activiti 的依赖:
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.1.0.M6</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>7.1.0.M6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
2. 配置流程引擎
创建一个配置类来初始化 Activiti 的流程引擎:
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
public class ActivitiConfig {
public static ProcessEngine getProcessEngine() {
// 获取默认的流程引擎实例
return ProcessEngines.getDefaultProcessEngine();
}
}
3. 设计流程定义
使用 Activiti Modeler 或其他 BPMN 2.0 设计工具设计一个简单的请假流程,保存为 leave_process.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"
targetNamespace="http://www.activiti.org/test">
<process id="leaveProcess" name="Leave Process" isExecutable="true">
<startEvent id="startEvent" name="Start"></startEvent>
<userTask id="applyTask" name="Apply Leave" activiti:assignee="employee"></userTask>
<userTask id="approveTask" name="Approve Leave" activiti:assignee="manager"></userTask>
<endEvent id="endEvent" name="End"></endEvent>
<sequenceFlow id="flow1" sourceRef="startEvent" targetRef="applyTask"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="applyTask" targetRef="approveTask"></sequenceFlow>
<sequenceFlow id="flow3" sourceRef="approveTask" targetRef="endEvent"></sequenceFlow>
</process>
</definitions>
这个流程定义了一个简单的请假流程,包括员工申请请假和经理审批两个用户任务。
4. 部署流程定义
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
public class DeploymentExample {
public static void main(String[] args) {
ProcessEngine processEngine = ActivitiConfig.getProcessEngine();
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("leave_process.bpmn20.xml");
Deployment deployment = deploymentBuilder.deploy();
System.out.println("Deployment ID: " + deployment.getId());
}
}
这段代码将 leave_process.bpmn20.xml 文件部署到 Activiti 流程引擎中。
5. 启动流程实例
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.runtime.ProcessInstance;
public class StartProcessExample {
public static void main(String[] args) {
ProcessEngine processEngine = ActivitiConfig.getProcessEngine();
ProcessInstance processInstance = processEngine.getRuntimeService()
.startProcessInstanceByKey("leaveProcess");
System.out.println("Process Instance ID: " + processInstance.getId());
}
}
这段代码根据流程定义的键 leaveProcess 启动一个新的流程实例。
6. 完成用户任务
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.task.Task;
import java.util.List;
public class CompleteTaskExample {
public static void main(String[] args) {
ProcessEngine processEngine = ActivitiConfig.getProcessEngine();
// 员工完成申请任务
List<Task> employeeTasks = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("employee")
.list();
for (Task task : employeeTasks) {
processEngine.getTaskService().complete(task.getId());
System.out.println("Employee completed task: " + task.getName());
}
// 经理完成审批任务
List<Task> managerTasks = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("manager")
.list();
for (Task task : managerTasks) {
processEngine.getTaskService().complete(task.getId());
System.out.println("Manager completed task: " + task.getName());
}
}
}
这段代码分别模拟员工和经理完成各自的用户任务,推动流程的执行。
总结
Activiti 工作流引擎允许开发者以图形化的方式设计业务流程,并通过 Java 代码来部署、启动和执行这些流程。通过上述示例,我们实现了一个简单的请假流程,包括流程定义、部署、启动和任务处理等步骤。在实际应用中,可以根据具体业务需求设计更复杂的流程,并结合其他系统进行集成。

浙公网安备 33010602011771号