SpringBoot2.1.1.RELEASE集成activiti 5.22.0
在现代企业的业务处理中,工作流引擎是一个非常关键的组件。Activiti是一个强大的开源工作流引擎,其主要的功能包括流程定义和执行、任务分配和处理、事件管理和持久化工作流数据等。在这篇文章中,我们将会介绍如何在SpringBoot2.1.1.RELEASE中集成Activiti 5.22.0。
1.创建Spring Boot项目
首先,在你的开发环境中创建一个空的Spring Boot项目,并在pom.xml文件中添加以下依赖:
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>5.22.0</version> </dependency>
这个依赖包含Activiti引擎的基本配置,并可以通过Spring Boot的自动配置来为其提供默认值。
2.配置数据库
Activiti需要一个数据库来存储其运行时状态和数据。在本教程中,我们将使用MySQL数据库。你可以在application.properties文件中使用以下属性来配置数据源和Hibernate:
spring.datasource.url=jdbc:mysql://localhost:3306/activiti spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.hibernate.ddl-auto=update
以上是一个基本的配置,它使用Hibernate自动创建数据库表,并使用MySQL5InnoDBDialect作为数据库方言。
3.创建流程定义
流程定义是用Activiti XML格式定义的。通常,你会在src/main/resources目录下创建一个processes目录,并将所有流程定义文件放在这个目录下。下面是一个简单的流程定义示例:
<?xml version="1.0" encoding="UTF-8"?>
<process id="myProcess" name="My process">
<startEvent id="startEvent" name="Start"></startEvent>
<userTask id="task1" name="Task 1" assignee="${user}"></userTask>
<sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1"></sequenceFlow>
<endEvent id="endEvent" name="End"></endEvent>
<sequenceFlow id="flow2" sourceRef="task1" targetRef="endEvent"></sequenceFlow>
</process>
以上流程定义包括一个启动事件、一个人工任务、结束事件和两个顺序流。在该流程中,人工任务由属性“assignee”指定了它的执行者。
4.运行流程
在Spring Boot中,你可以使用Activiti服务来启动和管理流程。在你的代码中注入Activiti服务(使用@Autowired注解):
@Autowired private RuntimeService runtimeService;
使用该服务的startProcessInstanceByKey方法,就可以启动一个流程:
public void startProcess(String key, Map<String,Object> variables) {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key,variables);
}
个参数是流程定义的ID。第二个参数是变量的映射,它用于为流程实例设置初始变量。
5.管理任务
一旦流程启动,你将会面对一个或多个任务,这些任务需要被执行。在Spring Boot中,你可以使用TaskService服务来处理任务。在你的代码中注入TaskService服务:
@Autowired private TaskService taskService;
使用该服务的createQuery方法,可以查询所有的任务:
public List<Task> listTasks(String assignee) {
List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
return tasks;
}
在这个示例中,我们选择查询分配给特定用户的所有任务。
你可以使用TaskService的complete方法来完成任务:
public void completeTask(String taskId, Map<String,Object> variables) {
taskService.complete(taskId,variables);
}
个参数是任务ID,在这里,我们使用任务查询方法返回的id属性。第二个参数是变量的映射,用于在完成任务时设置变量。
6.完成流程
当所有任务都完成时,流程将处于结束状态。你可以使用HistoryService服务来查询流程历史数据。在你的代码中注入HistoryService服务:
@Autowired private HistoryService historyService;
使用该服务的createHistoricProcessInstanceQuery方法,可以查询历史的流程实例数据:
public List<HistoricProcessInstance> listProcessInstances() {
List<HistoricProcessInstance> processInstances = historyService.createHistoricProcessInstanceQuery().list();
return processInstances;
}
使用getHistoricVariableInstance查询方法,可以查询历史流程实例中定义的变量:
public HistoricVariableInstance getVariable(String processInstanceId, String variableName) {
HistoricVariableInstance variable = historyService.createHistoricVariableInstanceQuery()
.processInstanceId(processInstanceId)
.variableName(variableName)
.singleResult();
return variable;
}
7.总结
本文介绍了如何在Spring Boot中集成Activiti 5.22.0,在其中定义和执行基本的工作流。Activiti具有强大的工作流引擎功能,可以大大地提高企业的业务流程效率。
