发布时间: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开展项目,应当安装一个附加组件。该附加组件,可以直接进行搜索并安装。
流程符号、画流程图

流程符号:事件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
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码