記錄一次 Activiti 工作流引擎的核心操作實戰,涵蓋流程部署、實例啟動、任務查詢/完成、變量設定與獲取(含對象序列化),代碼基於 JUnit 測試類完整呈現。
StudentLeaveProcess.bpmn + .pngactiviti.cfg.xml(預設讀取)Student(含 id、name)@Test
public void deployWidthClassPath() {
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("diagrams/StudentLeaveProcess.bpmn")
.addClasspathResource("diagrams/StudentLeaveProcess.png")
.name("學生請假流程")
.deploy();
System.out.println("部署ID: " + deployment.getId());
}
@Test
public void start() {
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("studentLeaveProcess");
System.out.println("實例ID: " + pi.getId());
}
@Test
public void findTask() {
List<Task> list = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("王五")
.list();
for (Task task : list) {
System.out.println("任務ID: " + task.getId() + ", 名稱: " + task.getName());
}
}
@Test
public void completeTask() {
processEngine.getTaskService().complete("50002"); // 任務ID
System.out.println("任務完成!");
}
@Test
public void setVariableValues() {
TaskService taskService = processEngine.getTaskService();
taskService.setVariable(taskId, "days", 2);
taskService.setVariable(taskId, "date", new Date());
taskService.setVariable(taskId, "reason", "發燒了");
taskService.setVariable(taskId, "student", new Student(1, "張三")); // 對象自動序列化
}
@Test
public void setVariableMap() {
Map<String, Object> vars = new HashMap<>();
vars.put("days", 3);
vars.put("student", new Student(2, "張三1"));
taskService.setVariables(taskId, vars); // 覆蓋原有變量
}
@Test
public void getVariableValues() {
TaskService taskService = processEngine.getTaskService();
Integer days = (Integer) taskService.getVariable(taskId, "days");
Student student = (Student) taskService.getVariable(taskId, "student");
System.out.println("student: " + student);
}
@Test
public void getVariableMap() {
Map<String, Object> vars = taskService.getVariables(taskId);
System.out.println(vars);
}
act_re_deployment:部署資訊act_re_procdef:流程定義act_ru_task:運行時任務act_ru_variable:運行時變量(任務完成自動清理)taskId 獲取。setVariables(Map) 會覆蓋該任務所有現有變量,謹慎使用。Serializable,否則序列化失敗。完整測試類見代碼區,可直接複製跑通流程。