Activiti工作流引擎入门教程
一、Activiti
Activiti是一个轻量级、开源的Java工作流引擎,遵循BPMN 2.0标准,旨在帮助开发者快速构建、部署和管理业务流程。它提供了丰富的API和工具,支持流程定义、执行、监控和管理,适用于各种复杂业务场景。
二、Activiti核心概念
- 流程定义(Process Definition):描述业务流程的XML文件,遵循BPMN 2.0标准。
- 流程实例(Process Instance):流程定义的一个具体执行实例。
- 任务(Task):流程实例中的一个工作单元,需要由用户或系统完成。
- 执行对象(Execution):流程实例或子流程实例的运行时表示。
- 事件(Event):流程中的特定时刻,如开始事件、结束事件、中间事件等。
三、Activiti环境搭建
1. 引入依赖
在Maven项目的pom.xml
文件中添加Activiti依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.x.x</version> <!-- 请使用版本 -->
</dependency>
2. 配置数据库
Activiti默认使用H2内存数据库,但生产环境通常使用MySQL、PostgreSQL等。在activiti.cfg.xml
或Spring Boot配置中指定数据源:
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/activiti?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
3. 初始化流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
四、Activiti基本使用
1. 部署流程定义
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/my-process.bpmn20.xml")
.deploy();
2. 启动流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
3. 查询任务
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
4. 完成任务
for (Task task : tasks) {
taskService.complete(task.getId());
}
五、Activiti高级特性
1. 流程变量
在流程执行过程中传递数据:
```java
// 设置流程变量
runtimeService.setVariable(processInstance.getId(), "variableName", "value");
// 获取流程变量
Object variableValue = runtimeService.getVariable(processInstance.getId(), "variableName");
```
2. 监听器
在流程事件(如任务创建、完成)发生时执行自定义逻辑:
// 在BPMN文件中配置监听器
<userTask id="userTask1" name="User Task">
<extensionElements>
<activiti:taskListener event="complete" class="com.example.MyTaskListener"/>
</extensionElements>
</userTask>
3. 子流程与调用活动
支持嵌套流程(子流程)和调用其他流程定义:
```xml
```
六、Activiti与Spring Boot集成
1. 引入依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.x.x</version>
</dependency>
2. 配置数据源和流程引擎
在application.properties
中配置数据库连接和Activiti属性:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/activiti?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
Activiti配置
activiti.database-schema-update=true
```
3. 使用Spring Boot自动配置
```java
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
// 使用方法与独立版Activiti相同
```
七、Activiti流程设计器
Activiti提供了基于Web的流程设计器,支持可视化流程建模。可以通过Activiti Modeler(集成在Activiti Explorer中)或第三方工具(如Camunda Modeler,兼容BPMN 2.0)进行流程设计。
八、常见问题与解决方案
- 流程实例挂起:检查流程定义是否正确,任务是否完成,是否有未处理的异常。
- 性能问题:优化数据库查询,使用缓存,减少不必要的流程变量。
- 并发问题:确保流程变量和任务的线程安全,使用乐观锁或悲观锁机制。
九、学习资源
- 官方文档:Activiti官方文档
- 示例项目:GitHub上的Activiti示例项目,如activiti-examples
- 社区支持:Stack Overflow、Activiti论坛等
通过以上步骤,你可以快速入门Activiti工作流引擎,并开始构建自己的业务流程管理系统。随着实践的深入,你将逐渐掌握Activiti的高级特性和实践。