SpringBoot中使⽤activiti的⽅法教程(⼀)
前⾔
Activiti API是⼀个⼯作流程(workflow)和业务流程管理(BPM)系统,可以定义流程、执⾏流程并以不同⽅式对其实现运⾏。使⽤API的开发可以在任何IDE中完成,但是要使⽤Activiti Designer需要Eclipse,IDEA中使⽤actiBPM插件。
定义流程有⼏种⽅式:
1. 使⽤BPMN
2.0标准在定义⼀个流程XML。
2. 使⽤StartEvent,EndEvent,UserTask,SequenceFlow等Java类。
如果我们想要运⾏进程或访问任何服务,需要⾸先创建ProcessEngineConfiguration。也就是
说,ProcessEngineConfiguration是使⽤Activiti API的起始之点,使⽤这个类也可获得流程引擎,然后就可以执⾏⼯作流和BPMN操作了。
Maven依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-security</artifactId>
<version>6.0.0</version>
</dependency>
⾸先,我们需要配置ProcessEngineConfiguration连接到数据库,常使⽤XML⽂件l进⾏配置:
<bean id="processEngineConfiguration" class="ine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
我们可以得到使⽤ProcessEngines类获得流程引擎了:
ProcessEngine processEngine = DefaultProcessEngine();
调⽤这条语句将寻类路径中l⽂件,并根据⽂件中的配置构造ProcessEngine。
⽐如我们可以在测试类中写⼊下⾯代码来获得流程引擎:
ProcessEngine processEngine = DefaultProcessEngine();
assertNotNull(processEngine);
assertEquals("root", ProcessEngineConfiguration().getJdbcUsername());
以上我们通过ProcessEngineConfiguration这个配置⼊⼝获得了流程引擎ProcessEngine,ProcessEngine是我们与Activiti的API打交道的主要⽅式,通过ProcessEngine,我们可以访问各种提供⼯作流/ BPMN功能的服务,该流程引擎和所有的服务对象都是线程安全的。
该ProcessEngines类将扫描的l和l⽂件。对于l⽂件,将以Spring⽅式创建 -将创建Spring Application Context并从中获取ProcessEngine。在执⾏流程期间,将按BPMN⽂件中定义的顺序访问所有步骤。
为了更进⼀步了解流程概念,我们先了解⼀下Activiti中的流程概念和术语:
(1) ⼀个ProcessDefinition代表的业务流程。它⽤于定义流程中不同步骤的结构和⾏为。
(2) 部署流程定义意味着将流程定义加载到Activiti数据库中。
(3) 流程定义主要由BPMN 2.0标准定义,也可以使⽤Java代码定义它们,定义的所有术语也可⽤作Java类。
(4) ⼀旦我们开始运⾏流程定义,就可以称为⼀个流程process。
(5) processInstance是ProcessDefinition⼀个执⾏实例。
(6) ⼀个StartEvent与每⼀个业务流程有关,它表⽰该流程的切⼊点,同样,有⼀个EndEvent表⽰流程的结束。我们可以定义这些事件的条件。
(7) 开始和结束之间的所有步骤(或元素)称为任务,任务可以是各种类型的。最常⽤的任务是UserTasks和ServiceTasks。
顾名思义,UserTasks需要由⽤户⼿动执⾏,另⼀⽅⾯,ServiceTasks配置了⼀段代码,每当执⾏到达这段代码时,代码将被执⾏。
SequenceFlows⽤来连接任务,我们可以通过它将源元素和⽬标元素连接起来定义⼀个SequenceFlows;同样,我们还可以在SequenceFlow上定义条件,这样能在流程中创建条件路径。
下图是⼀个请教BPM的定义配置⽂件,配置元素在上⾯都有阐述,看图可产⽣更直观的印象:
该流程定义属于⼀个ProcessDefinition,起始于startEvent,结束于endEvent,中间步骤是userTask或serviceTask,其中也有SequenceFlows进⾏元素连接。
有了流程定义,我们可以使⽤Activiti提供的服务功能进⾏流程运⾏,Activiti提供的服务有:
RepositoryService帮助我们实现流程定义的部署。此服务会处理与流程定义相关的静态数据。
RuntimeService管理 ProcessInstances(当前正在运⾏的进程)以及进程变量
TaskService会跟踪 UserTasks,需要由⽤户⼿动执⾏的任务是Activiti API的核⼼。我们可以使⽤此服务创建任务,声明并完成任务,分配任务的受让⼈等。
springboot实现aopFormService是⼀项可选服务,它⽤于定义中开始表单和任务表单。
IdentityService管理⽤户和组
HistoryService会跟踪Activiti Engine的历史记录。我们还可以设置不同的历史级别。
ManagementService与元数据相关,在创建应⽤程序时通常不需要
DynamicBpmnService帮助我们在不重新部署的情况下更改流程中的任何内容
Activiti的流程基础知识已经准备完成,下⾯我们以请教为流程说明它的使⽤:感兴趣的朋友们:
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论