Spring Boot中使用Activiti的方法教程(二)

网友投稿 247 2023-07-23

Spring Boot中使用Activiti的方法教程(二)

前言

前面一节我们已经了解了Activiti的基础概念,包括流程定义的用语和它的API功能,已经如何入手Activiti,在这一节我们将结合代码具体学习使用。小图是我们需要完成的请假流程图:

正如我们在图中看到的,这是一个非常简单的流程:员工提出休假请求,提供休假天数和开始日期。请求发送给经理。他们可以批准/拒绝该请求。

如果获得批准,则会定义一个服务任务serviceTask来发送确认电子邮件。如果被拒绝,员工可以选择修改并重新发送请求,也可以不执行任何操作。

此流程的BPMN 2.0定义文件VacationRequest.bpmn20.xml将start事件定义为:

required="true"/>

type="date" datePattern="MM-dd-yyyy hh:mm" required="true"/>

<![CDATA[startEvent1]]>

分配给用户组“management”的第一个用户任务userTask将如下所示:

${employeeName} 请假 ${numberOfDays} 天

(Motivation: ${reason}).

name="你要批准这个请假要求吗?"

type="enum"

required="true"/>

<![CDATA[true]]>

<![CDATA[true]]>

<![CDATA[sid-B9AA8E66-2F11-45D0-A270-B052E1A9248E]]>

使用ServiceTask,我们需要定义要执行的代码段。我们将SendEmailServiceTask.java类作为这段代码执行者。

activiti:class="com.example.activitiwithspring.servicetasks.SendEmailServiceTask.java">

<![CDATA[sid-2C5E1831-9101-4F70-9AEF-4BA72B704205]]>

SendEmailServiceTask的代码如下:实现JavaDelegate接口,实现其execute方法:

public class SendEmailServiceTask implements JavaDelegate {

public void execute(DelegateExecution execution) {

//logic to sent email confirmation

}

}

通过在“sequenceFlow”中添加“conditionExpression”标记来决定发送邮件在什么条件下触发,也就是定义一个条件流:

sourceRef="sid-12A577AE-5227-4918-8DE1-DC077D70967C"

targetRef="send-email-confirmation">

<![CDATA[sid-609BEB69-E833-4D2F-BD14-FC8F7FD3E9C7]]>

<![CDATA[${vacationApproved == 'true'}]]>

这里,vacationApproved是上面的UserTask的formProperty。

部署流程

为了使我们的流程被Activiti Engine所知,我们需要部署该流程。我们可以使用RepositoryService以编程方式执行此操作。让我们编写一个JUnit测试来看看:

@Test

public void givenBPMN_whenDeployProcess_thenDeployed() {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = processEngine.getRepositoryService();

repositoryService.createDeployment()

.addClasspathResource("org/activiti/test/vacationRequest.bpmn20.xml")

.deploy();

Long count = repositoryService.createProcessDefinitionQuery().count();

assertTrue(count >= 1);

}

部署意味着引擎将解析BPMN流程定义文件并将其转换为可执行文件。此外,还会将记录添加到每个部署的Repository表中。之后,我们可以查询Repository服务从而获取已部署的进程:也就是ProcessDefinitions。

启动流程实例ProcessInstance

在将ProcessDefinition部署到Activiti Engine之后,我们可以通过创建ProcessInstances来执行该流程定义。如果说ProcessDefinition绘制的是一幅蓝图,那么processInstance就是它的执行实现。

对于一个ProcessDefinition,可以有多个ProcessInstances。

可以通过RuntimeService访问与ProcessInstances相关的所有详细信息。

在我们的示例中,在开始事件中,我们需要传递休假天数、开始日期和原因。我们将使用流程变量,并在创建ProcessInstance时传递它们。

编写一个JUnit测试用例实现上面想法:

@Test

public void givenDeployedProcess_whenStartProcessInstance_thenRunning() {

//deploy the process definition

Map variables = new HashMap >();

variables.put("employeeName", "John");

variables.put("numberOfDays", 4);

variables.put("vacationMotivation", "I need a break!");

RuntimeService runtimeService = processEngine.getRuntimeService();

ProcessInstance processInstance = runtimeService

.startProcessInstanceByKey("vacationRequest", variables);

Long count=runtimeService.createProcessInstanceQuery().count();

assertEquals("1", count.toString());

}

某个流程定义的多个实例将因流程变量而异,也就是说,同一份流程定义,因为变量不同,导致流程实例也会不同。

有多种方法启动流程实例,在这里,我们正在使用该流程的key:vacationRequest启动流程,启动流程实例后,我们可以通过查询RuntimeService来获取有关它的信息。

完成任务

当我们的流程实例开始运行时,第一步执行的是用户任务userTask,分配任务给用户组“management”的用户。该用户可能有一个收件箱,其中包含要由他们完成的任务列表。现在,如果我们想继续执行流程,则需要用户完成此任务。对于Activiti Engine,它被称为“完成任务”。

我们可以查询TaskService,获取任务对象,然后完成它。

@Test

public void givenProcessInstance_whenCompleteTask_thenGotNextTask() {

// 部署流程并开始一个流程实例

TaskService taskService = processEngine.getTaskService();

List tasks = taskService.createTaskQuery()

.taskCandidateGroup("management").list();

Task task = tasks.get(0);

Map taskVariables = new HashMap<>();

taskVariables.put("vacationApproved", "false");

taskVariables.put("comments", "We have a tight deadline!");

taskService.complete(task.getId(), taskVariables);

Task currentTask = taskService.createTaskQuery()

.taskName("修改休假请求").singleResult();

assertNotNull(currentTask);

}

请注意,TaskService的complete()方法也接受所需的流程变量。我们传递了经理的回复。

在此之后,流程引擎将继续下一步。在这里,下一步询问员工是否要重新发送休假请求。

因此,我们的ProcessInstance正在等待此UserTask,其名称为“修改休假请求”。

暂停和激活流程

我们可以暂停ProcessDefinition和ProcessInstance。如果我们暂停一个流程定义ProcessDefinition,则在它暂停挂起时我们就无法创建它的实例。我们可以使用RepositoryService来做到这一点:

@Test(expected = ActivitiException.class)

public void givenDeployedProcess_whenSuspend_thenNoProcessInstance() {

// deploy the process definition

repositoryService.suspendProcessDefinitionByKey("vacationRequest");

runtimeService.startProcessInstanceByKehttp://y("vacationRequest");

}

要再次激活它,我们只需要调用其中一个repositoryService.activateProcessDefinitionXXX方法。

同样,我们可以使用RuntimeService暂停ProcessInstance 。

结论

在本文中,我们了解了如何将Activiti与Spring Boot结合使用。我们创建了一个示例ProcessEngineCofiguration文件,它可以帮助我们创建ProcessEngine。ProcessEngine提供的服务帮助我们管理和跟踪ProcessDefinitions,ProcessInstances,UserTasks等。

示例代码位于github上。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

required="true"/>

type="date" datePattern="MM-dd-yyyy hh:mm" required="true"/>

<![CDATA[startEvent1]]>

分配给用户组“management”的第一个用户任务userTask将如下所示:

${employeeName} 请假 ${numberOfDays} 天

(Motivation: ${reason}).

name="你要批准这个请假要求吗?"

type="enum"

required="true"/>

<![CDATA[true]]>

<![CDATA[true]]>

<![CDATA[sid-B9AA8E66-2F11-45D0-A270-B052E1A9248E]]>

使用ServiceTask,我们需要定义要执行的代码段。我们将SendEmailServiceTask.java类作为这段代码执行者。

activiti:class="com.example.activitiwithspring.servicetasks.SendEmailServiceTask.java">

<![CDATA[sid-2C5E1831-9101-4F70-9AEF-4BA72B704205]]>

SendEmailServiceTask的代码如下:实现JavaDelegate接口,实现其execute方法:

public class SendEmailServiceTask implements JavaDelegate {

public void execute(DelegateExecution execution) {

//logic to sent email confirmation

}

}

通过在“sequenceFlow”中添加“conditionExpression”标记来决定发送邮件在什么条件下触发,也就是定义一个条件流:

sourceRef="sid-12A577AE-5227-4918-8DE1-DC077D70967C"

targetRef="send-email-confirmation">

<![CDATA[sid-609BEB69-E833-4D2F-BD14-FC8F7FD3E9C7]]>

<![CDATA[${vacationApproved == 'true'}]]>

这里,vacationApproved是上面的UserTask的formProperty。

部署流程

为了使我们的流程被Activiti Engine所知,我们需要部署该流程。我们可以使用RepositoryService以编程方式执行此操作。让我们编写一个JUnit测试来看看:

@Test

public void givenBPMN_whenDeployProcess_thenDeployed() {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = processEngine.getRepositoryService();

repositoryService.createDeployment()

.addClasspathResource("org/activiti/test/vacationRequest.bpmn20.xml")

.deploy();

Long count = repositoryService.createProcessDefinitionQuery().count();

assertTrue(count >= 1);

}

部署意味着引擎将解析BPMN流程定义文件并将其转换为可执行文件。此外,还会将记录添加到每个部署的Repository表中。之后,我们可以查询Repository服务从而获取已部署的进程:也就是ProcessDefinitions。

启动流程实例ProcessInstance

在将ProcessDefinition部署到Activiti Engine之后,我们可以通过创建ProcessInstances来执行该流程定义。如果说ProcessDefinition绘制的是一幅蓝图,那么processInstance就是它的执行实现。

对于一个ProcessDefinition,可以有多个ProcessInstances。

可以通过RuntimeService访问与ProcessInstances相关的所有详细信息。

在我们的示例中,在开始事件中,我们需要传递休假天数、开始日期和原因。我们将使用流程变量,并在创建ProcessInstance时传递它们。

编写一个JUnit测试用例实现上面想法:

@Test

public void givenDeployedProcess_whenStartProcessInstance_thenRunning() {

//deploy the process definition

Map variables = new HashMap >();

variables.put("employeeName", "John");

variables.put("numberOfDays", 4);

variables.put("vacationMotivation", "I need a break!");

RuntimeService runtimeService = processEngine.getRuntimeService();

ProcessInstance processInstance = runtimeService

.startProcessInstanceByKey("vacationRequest", variables);

Long count=runtimeService.createProcessInstanceQuery().count();

assertEquals("1", count.toString());

}

某个流程定义的多个实例将因流程变量而异,也就是说,同一份流程定义,因为变量不同,导致流程实例也会不同。

有多种方法启动流程实例,在这里,我们正在使用该流程的key:vacationRequest启动流程,启动流程实例后,我们可以通过查询RuntimeService来获取有关它的信息。

完成任务

当我们的流程实例开始运行时,第一步执行的是用户任务userTask,分配任务给用户组“management”的用户。该用户可能有一个收件箱,其中包含要由他们完成的任务列表。现在,如果我们想继续执行流程,则需要用户完成此任务。对于Activiti Engine,它被称为“完成任务”。

我们可以查询TaskService,获取任务对象,然后完成它。

@Test

public void givenProcessInstance_whenCompleteTask_thenGotNextTask() {

// 部署流程并开始一个流程实例

TaskService taskService = processEngine.getTaskService();

List tasks = taskService.createTaskQuery()

.taskCandidateGroup("management").list();

Task task = tasks.get(0);

Map taskVariables = new HashMap<>();

taskVariables.put("vacationApproved", "false");

taskVariables.put("comments", "We have a tight deadline!");

taskService.complete(task.getId(), taskVariables);

Task currentTask = taskService.createTaskQuery()

.taskName("修改休假请求").singleResult();

assertNotNull(currentTask);

}

请注意,TaskService的complete()方法也接受所需的流程变量。我们传递了经理的回复。

在此之后,流程引擎将继续下一步。在这里,下一步询问员工是否要重新发送休假请求。

因此,我们的ProcessInstance正在等待此UserTask,其名称为“修改休假请求”。

暂停和激活流程

我们可以暂停ProcessDefinition和ProcessInstance。如果我们暂停一个流程定义ProcessDefinition,则在它暂停挂起时我们就无法创建它的实例。我们可以使用RepositoryService来做到这一点:

@Test(expected = ActivitiException.class)

public void givenDeployedProcess_whenSuspend_thenNoProcessInstance() {

// deploy the process definition

repositoryService.suspendProcessDefinitionByKey("vacationRequest");

runtimeService.startProcessInstanceByKehttp://y("vacationRequest");

}

要再次激活它,我们只需要调用其中一个repositoryService.activateProcessDefinitionXXX方法。

同样,我们可以使用RuntimeService暂停ProcessInstance 。

结论

在本文中,我们了解了如何将Activiti与Spring Boot结合使用。我们创建了一个示例ProcessEngineCofiguration文件,它可以帮助我们创建ProcessEngine。ProcessEngine提供的服务帮助我们管理和跟踪ProcessDefinitions,ProcessInstances,UserTasks等。

示例代码位于github上。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

type="date" datePattern="MM-dd-yyyy hh:mm" required="true"/>

<![CDATA[startEvent1]]>

分配给用户组“management”的第一个用户任务userTask将如下所示:

${employeeName} 请假 ${numberOfDays} 天

(Motivation: ${reason}).

name="你要批准这个请假要求吗?"

type="enum"

required="true"/>

<![CDATA[true]]>

<![CDATA[true]]>

<![CDATA[sid-B9AA8E66-2F11-45D0-A270-B052E1A9248E]]>

使用ServiceTask,我们需要定义要执行的代码段。我们将SendEmailServiceTask.java类作为这段代码执行者。

activiti:class="com.example.activitiwithspring.servicetasks.SendEmailServiceTask.java">

<![CDATA[sid-2C5E1831-9101-4F70-9AEF-4BA72B704205]]>

SendEmailServiceTask的代码如下:实现JavaDelegate接口,实现其execute方法:

public class SendEmailServiceTask implements JavaDelegate {

public void execute(DelegateExecution execution) {

//logic to sent email confirmation

}

}

通过在“sequenceFlow”中添加“conditionExpression”标记来决定发送邮件在什么条件下触发,也就是定义一个条件流:

sourceRef="sid-12A577AE-5227-4918-8DE1-DC077D70967C"

targetRef="send-email-confirmation">

<![CDATA[sid-609BEB69-E833-4D2F-BD14-FC8F7FD3E9C7]]>

<![CDATA[${vacationApproved == 'true'}]]>

这里,vacationApproved是上面的UserTask的formProperty。

部署流程

为了使我们的流程被Activiti Engine所知,我们需要部署该流程。我们可以使用RepositoryService以编程方式执行此操作。让我们编写一个JUnit测试来看看:

@Test

public void givenBPMN_whenDeployProcess_thenDeployed() {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = processEngine.getRepositoryService();

repositoryService.createDeployment()

.addClasspathResource("org/activiti/test/vacationRequest.bpmn20.xml")

.deploy();

Long count = repositoryService.createProcessDefinitionQuery().count();

assertTrue(count >= 1);

}

部署意味着引擎将解析BPMN流程定义文件并将其转换为可执行文件。此外,还会将记录添加到每个部署的Repository表中。之后,我们可以查询Repository服务从而获取已部署的进程:也就是ProcessDefinitions。

启动流程实例ProcessInstance

在将ProcessDefinition部署到Activiti Engine之后,我们可以通过创建ProcessInstances来执行该流程定义。如果说ProcessDefinition绘制的是一幅蓝图,那么processInstance就是它的执行实现。

对于一个ProcessDefinition,可以有多个ProcessInstances。

可以通过RuntimeService访问与ProcessInstances相关的所有详细信息。

在我们的示例中,在开始事件中,我们需要传递休假天数、开始日期和原因。我们将使用流程变量,并在创建ProcessInstance时传递它们。

编写一个JUnit测试用例实现上面想法:

@Test

public void givenDeployedProcess_whenStartProcessInstance_thenRunning() {

//deploy the process definition

Map variables = new HashMap >();

variables.put("employeeName", "John");

variables.put("numberOfDays", 4);

variables.put("vacationMotivation", "I need a break!");

RuntimeService runtimeService = processEngine.getRuntimeService();

ProcessInstance processInstance = runtimeService

.startProcessInstanceByKey("vacationRequest", variables);

Long count=runtimeService.createProcessInstanceQuery().count();

assertEquals("1", count.toString());

}

某个流程定义的多个实例将因流程变量而异,也就是说,同一份流程定义,因为变量不同,导致流程实例也会不同。

有多种方法启动流程实例,在这里,我们正在使用该流程的key:vacationRequest启动流程,启动流程实例后,我们可以通过查询RuntimeService来获取有关它的信息。

完成任务

当我们的流程实例开始运行时,第一步执行的是用户任务userTask,分配任务给用户组“management”的用户。该用户可能有一个收件箱,其中包含要由他们完成的任务列表。现在,如果我们想继续执行流程,则需要用户完成此任务。对于Activiti Engine,它被称为“完成任务”。

我们可以查询TaskService,获取任务对象,然后完成它。

@Test

public void givenProcessInstance_whenCompleteTask_thenGotNextTask() {

// 部署流程并开始一个流程实例

TaskService taskService = processEngine.getTaskService();

List tasks = taskService.createTaskQuery()

.taskCandidateGroup("management").list();

Task task = tasks.get(0);

Map taskVariables = new HashMap<>();

taskVariables.put("vacationApproved", "false");

taskVariables.put("comments", "We have a tight deadline!");

taskService.complete(task.getId(), taskVariables);

Task currentTask = taskService.createTaskQuery()

.taskName("修改休假请求").singleResult();

assertNotNull(currentTask);

}

请注意,TaskService的complete()方法也接受所需的流程变量。我们传递了经理的回复。

在此之后,流程引擎将继续下一步。在这里,下一步询问员工是否要重新发送休假请求。

因此,我们的ProcessInstance正在等待此UserTask,其名称为“修改休假请求”。

暂停和激活流程

我们可以暂停ProcessDefinition和ProcessInstance。如果我们暂停一个流程定义ProcessDefinition,则在它暂停挂起时我们就无法创建它的实例。我们可以使用RepositoryService来做到这一点:

@Test(expected = ActivitiException.class)

public void givenDeployedProcess_whenSuspend_thenNoProcessInstance() {

// deploy the process definition

repositoryService.suspendProcessDefinitionByKey("vacationRequest");

runtimeService.startProcessInstanceByKehttp://y("vacationRequest");

}

要再次激活它,我们只需要调用其中一个repositoryService.activateProcessDefinitionXXX方法。

同样,我们可以使用RuntimeService暂停ProcessInstance 。

结论

在本文中,我们了解了如何将Activiti与Spring Boot结合使用。我们创建了一个示例ProcessEngineCofiguration文件,它可以帮助我们创建ProcessEngine。ProcessEngine提供的服务帮助我们管理和跟踪ProcessDefinitions,ProcessInstances,UserTasks等。

示例代码位于github上。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

name="你要批准这个请假要求吗?"

type="enum"

required="true"/>

<![CDATA[true]]>

<![CDATA[true]]>

<![CDATA[sid-B9AA8E66-2F11-45D0-A270-B052E1A9248E]]>

使用ServiceTask,我们需要定义要执行的代码段。我们将SendEmailServiceTask.java类作为这段代码执行者。

activiti:class="com.example.activitiwithspring.servicetasks.SendEmailServiceTask.java">

<![CDATA[sid-2C5E1831-9101-4F70-9AEF-4BA72B704205]]>

activiti:class="com.example.activitiwithspring.servicetasks.SendEmailServiceTask.java">

<![CDATA[sid-2C5E1831-9101-4F70-9AEF-4BA72B704205]]>

SendEmailServiceTask的代码如下:实现JavaDelegate接口,实现其execute方法:

public class SendEmailServiceTask implements JavaDelegate {

public void execute(DelegateExecution execution) {

//logic to sent email confirmation

}

}

通过在“sequenceFlow”中添加“conditionExpression”标记来决定发送邮件在什么条件下触发,也就是定义一个条件流:

sourceRef="sid-12A577AE-5227-4918-8DE1-DC077D70967C"

targetRef="send-email-confirmation">

<![CDATA[sid-609BEB69-E833-4D2F-BD14-FC8F7FD3E9C7]]>

<![CDATA[${vacationApproved == 'true'}]]>

sourceRef="sid-12A577AE-5227-4918-8DE1-DC077D70967C"

targetRef="send-email-confirmation">

<![CDATA[sid-609BEB69-E833-4D2F-BD14-FC8F7FD3E9C7]]>

<![CDATA[${vacationApproved == 'true'}]]>

这里,vacationApproved是上面的UserTask的formProperty。

部署流程

为了使我们的流程被Activiti Engine所知,我们需要部署该流程。我们可以使用RepositoryService以编程方式执行此操作。让我们编写一个JUnit测试来看看:

@Test

public void givenBPMN_whenDeployProcess_thenDeployed() {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = processEngine.getRepositoryService();

repositoryService.createDeployment()

.addClasspathResource("org/activiti/test/vacationRequest.bpmn20.xml")

.deploy();

Long count = repositoryService.createProcessDefinitionQuery().count();

assertTrue(count >= 1);

}

部署意味着引擎将解析BPMN流程定义文件并将其转换为可执行文件。此外,还会将记录添加到每个部署的Repository表中。之后,我们可以查询Repository服务从而获取已部署的进程:也就是ProcessDefinitions。

启动流程实例ProcessInstance

在将ProcessDefinition部署到Activiti Engine之后,我们可以通过创建ProcessInstances来执行该流程定义。如果说ProcessDefinition绘制的是一幅蓝图,那么processInstance就是它的执行实现。

对于一个ProcessDefinition,可以有多个ProcessInstances。

可以通过RuntimeService访问与ProcessInstances相关的所有详细信息。

在我们的示例中,在开始事件中,我们需要传递休假天数、开始日期和原因。我们将使用流程变量,并在创建ProcessInstance时传递它们。

编写一个JUnit测试用例实现上面想法:

@Test

public void givenDeployedProcess_whenStartProcessInstance_thenRunning() {

//deploy the process definition

Map variables = new HashMap >();

variables.put("employeeName", "John");

variables.put("numberOfDays", 4);

variables.put("vacationMotivation", "I need a break!");

RuntimeService runtimeService = processEngine.getRuntimeService();

ProcessInstance processInstance = runtimeService

.startProcessInstanceByKey("vacationRequest", variables);

Long count=runtimeService.createProcessInstanceQuery().count();

assertEquals("1", count.toString());

}

某个流程定义的多个实例将因流程变量而异,也就是说,同一份流程定义,因为变量不同,导致流程实例也会不同。

有多种方法启动流程实例,在这里,我们正在使用该流程的key:vacationRequest启动流程,启动流程实例后,我们可以通过查询RuntimeService来获取有关它的信息。

完成任务

当我们的流程实例开始运行时,第一步执行的是用户任务userTask,分配任务给用户组“management”的用户。该用户可能有一个收件箱,其中包含要由他们完成的任务列表。现在,如果我们想继续执行流程,则需要用户完成此任务。对于Activiti Engine,它被称为“完成任务”。

我们可以查询TaskService,获取任务对象,然后完成它。

@Test

public void givenProcessInstance_whenCompleteTask_thenGotNextTask() {

// 部署流程并开始一个流程实例

TaskService taskService = processEngine.getTaskService();

List tasks = taskService.createTaskQuery()

.taskCandidateGroup("management").list();

Task task = tasks.get(0);

Map taskVariables = new HashMap<>();

taskVariables.put("vacationApproved", "false");

taskVariables.put("comments", "We have a tight deadline!");

taskService.complete(task.getId(), taskVariables);

Task currentTask = taskService.createTaskQuery()

.taskName("修改休假请求").singleResult();

assertNotNull(currentTask);

}

请注意,TaskService的complete()方法也接受所需的流程变量。我们传递了经理的回复。

在此之后,流程引擎将继续下一步。在这里,下一步询问员工是否要重新发送休假请求。

因此,我们的ProcessInstance正在等待此UserTask,其名称为“修改休假请求”。

暂停和激活流程

我们可以暂停ProcessDefinition和ProcessInstance。如果我们暂停一个流程定义ProcessDefinition,则在它暂停挂起时我们就无法创建它的实例。我们可以使用RepositoryService来做到这一点:

@Test(expected = ActivitiException.class)

public void givenDeployedProcess_whenSuspend_thenNoProcessInstance() {

// deploy the process definition

repositoryService.suspendProcessDefinitionByKey("vacationRequest");

runtimeService.startProcessInstanceByKehttp://y("vacationRequest");

}

要再次激活它,我们只需要调用其中一个repositoryService.activateProcessDefinitionXXX方法。

同样,我们可以使用RuntimeService暂停ProcessInstance 。

结论

在本文中,我们了解了如何将Activiti与Spring Boot结合使用。我们创建了一个示例ProcessEngineCofiguration文件,它可以帮助我们创建ProcessEngine。ProcessEngine提供的服务帮助我们管理和跟踪ProcessDefinitions,ProcessInstances,UserTasks等。

示例代码位于github上。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:车辆违章:如何避免交通罚单和保护自己的驾驶记录
下一篇:Intellij IDEA 添加jar包的三种方式(小结)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~