activiti

本文深入探讨了Activiti的工作流引擎配置、Hello World示例、数据库表命名规范,以及ProcessEngine与相关Service的介绍。内容涵盖流程定义与流程实例的关系、流程的挂起与激活操作、个人和组任务的处理方式、任务交接、网关类型及其行为、监听器的使用,还有会签机制和服务任务与用户任务的区别。通过对这些关键概念的解析,有助于理解Activiti在实际工作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activiti.cfg.xml

activiti默认配置文件

1.数据源配置

2.activiti单独运行的ProcessEngine配置对象(processEngineConfiguration),
使用单独启动方式,默认情况下:bean的id=processEngineConfiguration
<bean id="processEngineConfiguration01" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <!--代表数据源-->
    <property name="dataSource" ref="dataSource"></property>

    <!--代表是否生成表结构-->
    <property name="databaseSchemaUpdate" value="true"/>
</bean>

helloworld

 //1.创建ProcessEngineConfiguration对象  第一个参数:配置文件名称  第二个参数是processEngineConfiguration的bean的id
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration01");
//2.创建ProcesEngine对象
ProcessEngine processEngine = configuration.buildProcessEngine();
//条件:1.activiti配置文件名称:activiti.cfg.xml   2.bean的id="processEngineConfiguration"。完成这步后创建了25张空表
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
				.name("请假申请单流程")
				.addClassPathResources("xxx.png")
                .addClassPathResources("xxx.bpmn").deploy();
或者:
Deployment deployment = repositoryService.createDeployment()
                .addZipInputStream(zipInputStream)
                .name("请假申请单流程")
                .deploy();

数据库表命名

ACT_RE_* : re表示repository,包含流程定义和 流程静态资源
ACT_RU_* : ru表示runtime,运行时的表,包含流程实例、任务,变量,异步任务,
等运行中的数据。activiti只在流程实例执行过程中保存这些数据,流程结束时就会删除这些记录
ACT_HI_* : history,历史数据
ACT_GE_* : general通用数据

processEngine 与其Service介绍

  • RepositoryService
  • RuntimeService
  • TaskService
  • HistoryService
  • ManagerService

流程定义与流程实例关系

  • 流程定义:
repositoryService.createDeployment()
                .addZipInputStream(zipInputStream)
                .name("请假申请单流程")
                .deploy();

涉及三张表:
act_re_deployment、act_re_procdef、act_ge_bytearray

  • 流程实例
    启动一次请假流程会创建一个新的流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();

//3.创建流程实例  流程定义的key=holiday
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday");

流程的挂起与激活

Boolean processDefinition.isSuspended()

repositoryService.activateProcessDefinitionById(processDefinitionID)

repository.suspendProcessDefinitionByID(processDefinitionID)

流程定义挂起后,不允许启动新的流程实例,该定义下所有流程实例挂起暂停执行

  • 单个流程实例的挂起与激活
processInstance.isSuspended()

runtimeService.activateProcessInstanceById(processInstanceID)

runtimeService.suspendProcessInstanceByID(processInstanceID)

个人任务assignee

  1. 固定写死assignee
  2. UEL表达式:unified expression language
    java EE规范一部分
bpmn图,assignee栏设置${assignee01}

Map = new hashMap
map.put("assignee01","张三")
runtimeService.startProcessInstanceByKey("processDefinitionKey",map)

流程变量

设置在userTask上,设置在连线上condition

组任务candidate user

多个候选人用逗号隔开

  • 组任务办理流程
    1.查询组任务
    2.拾取任务:taskService.claim(taskId,user)
    3.查询个人任务
    4.办理任务

2.归还任务:taskService.setAssignee(taskId,null)

查询任务的时候使用的是taskCandidateUser而不是taskAssignee

任务交接

taskService.setAssignee(taskId,candidateUser)

网关

排他网关exclusiveGateway、并行网关parallelGateway、包含网关inclusiveGateway

  • 排他网关
    即使两个分支条件都为true,也只会选择一条分支执行。
    使用排他网关原因:多个分支都为true,同时都跑进去,分支都为false,会流程异常结束,分支都为false,排他网关也会抛异常

  • 并行网关:fork与join,分支与汇聚
    即使顺序流定义了条件也会被忽略,多个分支都完成了,才算是汇聚

  • 包含网关,排他网关和并行网关结合体
    可以走满足多个条件的分支,最后汇聚

监听器

  • 流程监听器(ExecutionListener)
    event有:start、end、take(监控连线时候使用)
start与end属于整个流程
take属于连线
start、end、take都是实现ExecutionListener接口
  • 任务监听器(TaskListener ):也叫节点监听器
    event有:create、delete、complete、assignment、all
assignment:节点配置了处理人所以触发assignment事件监听,assignment事件比create先执行
complete:任务完成的时候,触发complete事件,因为任务完成之后,要从ACT_RU_TASK中删除这条记录,所以触发delete事件

会签

Multi InstanceSequenTialfalse
	Completion Condition
	Collection
	Element Variable
Assignee:对应ElementVariable

默认流程变量:nrOfInstances = nrOfCompletedInstances+nrOfActiviteInstances

  • nrOfInstances(numberOfInstances):会签中总共的实例数
  • nrOfCompletedInstances:已经完成的实例数量
  • nrOfActiviteInstances:当前活动的实例数量,即还没有完成的实例数量

ServiceTask与UserTask区别

serviceTask:调Java接口代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值