Integrating Activiti Workflow Engine with Spring Boot: Configuration, Code Samples, and Usage
This article explains how to integrate the Activiti BPMN 2.0 workflow engine into a Spring Boot application, covering Maven dependencies, data source and Activiti configuration, Spring MVC setup, Java code for starting, approving, and querying leave requests, as well as a simple AngularJS front‑end for task management.
Activiti is an open‑source BPMN 2.0 workflow engine that can be embedded in Java applications. By adding the
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>6.0.0</version></dependency>to a Spring Boot project, you enable workflow capabilities.
The required configuration includes a data source definition and Activiti settings in application.yml (or application.properties), for example:
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/act5?useSSL=true
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
activiti:
database-schema-update: true
check-process-definitions: true
process-definition-location-prefix: classpath:/processes/
history-level: fullA Spring MVC configuration class annotated with @EnableWebMvc and @Configuration registers static resource handlers for /static/** and /templates/**, allowing Thymeleaf views to be served.
To start a leave‑request process, the service defines a constant PROCESS_DEFINE_KEY = "vacationProcess" and uses the runtimeService.startProcessInstanceByKey method, setting variables such as applyUser, days, and reason. The current task is claimed and completed with those variables.
For approval, the boss queries tasks with
taskService.createTaskQuery().taskCandidateUser(userName).orderByTaskCreateTime().desc().list(), maps each Task to a VacTask DTO, and then completes the task by posting the result (approved or rejected) along with auditor information.
Historical records are retrieved from the Activiti history tables using historyService.createHistoricProcessInstanceQuery() filtered by the process definition key and start user. Each historic instance is converted back into a Vacation VO by loading its historic variables via historyService.createHistoricVariableInstanceQuery() and a utility method ActivitiUtil.setVars that reflects variable names onto the VO fields.
The front‑end uses AngularJS to display pending tasks in a table, showing task name, creation time, applicant, leave dates, and reason, with buttons to approve or reject. Sample HTML snippets:
<div ng-controller="myAudit">
<h2 ng-init="myAudit()">待我审核的请假</h2>
<table border="0">
<tr>
<td>任务名称</td>
<td>任务时间</td>
<td>申请人</td>
<td>申请时间</td>
<td>天数</td>
<td>事由</td>
<td>操作</td>
</tr>
<tr ng-repeat="vacTask in vacTaskList">
<td>{{vacTask.name}}</td>
<td>{{vacTask.createTime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
<td>{{vacTask.vac.applyUser}}</td>
<td>{{vacTask.vac.applyTime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
<td>{{vacTask.vac.days}}</td>
<td>{{vacTask.vac.reason}}</td>
<td>
<button type="button" ng-click="passAudit(vacTask.id, 1)">审核通过</button>
<button type="button" ng-click="passAudit(vacTask.id, 0)">审核拒绝</button>
</td>
</tr>
</table>
</div>The complete source code is available at https://gitee.com/yawensilence/activiti-demo6-springboot , providing a ready‑to‑run example of a Spring Boot + Activiti 6 workflow application.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Architect's Tech Stack
Java backend, microservices, distributed systems, containerized programming, and more.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
