Activiti 是一个轻量级的开源工作流和业务流程管理(BPM)引擎,下面我将详细介绍如何在本地环境中部署和运用 Activiti。
JDK 8 或更高版本
Maven 3.x
数据库(支持 H2、MySQL、PostgreSQL、Oracle 等)
IDE(如 IntelliJ IDEA 或 Eclipse)
org.activiti
activiti-engine
7.1.0.M6
org.activiti
activiti-spring
7.1.0.M6
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
public class ActivitiSetup {
public static void main(String[] args) {
// 创建独立配置
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000")
.setJdbcUsername("sa")
.setJdbcPassword("")
.setJdbcDriver("org.h2.Driver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 构建流程引擎
ProcessEngine processEngine = cfg.buildProcessEngine();
System.out.println("Activiti 流程引擎已启动: " + processEngine.getName());
}
}
@SpringBootApplication
public class ActivitiApplication {
public static void main(String[] args) {
SpringApplication.run(ActivitiApplication.class, args);
}
}
application.properties 配置:
# 数据库配置
spring.datasource.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
# Activiti 配置
spring.activiti.database-schema-update=true
spring.activiti.check-process-definitions=false
@Autowired
private RepositoryService repositoryService;
public void deployProcess() {
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/leave-approval.bpmn20.xml")
.name("请假审批流程")
.deploy();
System.out.println("流程部署成功,部署ID: " + deployment.getId());
}
@Autowired
private RuntimeService runtimeService;
public void startProcess() {
Map variables = new HashMap<>();
variables.put("employee", "张三");
variables.put("days", 3);
ProcessInstance instance = runtimeService.startProcessInstanceByKey("leaveApproval", variables);
System.out.println("流程实例已启动,实例ID: " + instance.getId());
}
@Autowired
private TaskService taskService;
public void completeTask() {
// 查询任务
List tasks = taskService.createTaskQuery()
.taskAssignee("李四") // 分配给李四的任务
.list();
// 完成任务
for (Task task : tasks) {
System.out.println("完成任务: " + task.getName());
taskService.complete(task.getId());
}
}
下载 Activiti Modeler (可从 Activiti 官网获取)
设计 BPMN 2.0 流程图
保存为 .bpmn 或 .bpmn20.xml 文件
3}]]>
修改 application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/activiti?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Activiti 会自动创建以下表:
ACT_RE_*: 资源存储表
ACT_RU_*: 运行时表
ACT_ID_*: 身份表
ACT_HI_*: 历史表
ACT_GE_*: 通用数据表
Activiti 提供了 REST API,可以通过以下方式启用:
@Configuration
public class ActivitiRestConfiguration extends AbstractActivitiRestConfiguration {
// 自动配置 REST API
}
然后可以通过以下 URL 访问:
http://localhost:8080/activiti-rest/service/repository/deployments
- 获取部署列表
下载 Activiti Explorer WAR 文件
部署到 Tomcat 或其他 Servlet 容器
访问 http://localhost:8080/activiti-explorer
management.endpoints.web.exposure.include=*
访问 http://localhost:8080/actuator
查看端点
表不存在错误:确保 spring.activiti.database-schema-update=true
流程定义未找到:检查 BPMN 文件是否在 resources/processes/ 目录下
任务分配问题:确保任务分配人(assignee)已正确设置
通过以上步骤,应该能够在本地成功部署和运用 Activiti 工作流引擎。根据实际需求,可以进一步探索 Activiti 的高级功能,如事件监听器、异步执行、多实例任务等。