# Activiti7集成SpringBoot2官方實例是怎樣的
## 引言
Activiti作為一款輕量級的工作流和業務流程管理(BPM)引擎,與SpringBoot的集成能夠顯著簡化企業級應用的開發流程。本文將基于Activiti7官方示例,詳細解析如何將其與SpringBoot2進行集成,并演示核心功能的實現過程。
---
## 一、環境準備與項目初始化
### 1.1 技術棧要求
- JDK 1.8+
- SpringBoot 2.3.x
- Activiti 7.1.0.M6
- Maven 3.6+
### 1.2 創建SpringBoot項目
通過Spring Initializr生成基礎項目:
```bash
curl https://start.spring.io/starter.zip \
-d dependencies=web,activiti \
-d type=maven-project \
-d language=java \
-d bootVersion=2.3.4.RELEASE \
-d groupId=com.example \
-d artifactId=activiti-demo \
-o activiti-demo.zip
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M6</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Activiti通過ActivitiAutoConfiguration實現:
- 自動創建ProcessEngine
- 配置ID生成器
- 設置Spring事務管理器
默認使用H2內存數據庫,生產環境可切換:
spring.datasource.url=jdbc:mysql://localhost:3306/activiti
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.activiti.database-schema-update=true
@Service
public class ProcessService {
@Autowired
private RepositoryService repositoryService;
public void deployProcess() {
repositoryService.createDeployment()
.addClasspathResource("processes/leave-approval.bpmn20.xml")
.name("請假流程")
.deploy();
}
}
@RestController
@RequestMapping("/process")
public class ProcessController {
@Autowired
private RuntimeService runtimeService;
@PostMapping("/start")
public String startProcess(@RequestBody Map<String,Object> variables) {
ProcessInstance instance = runtimeService.startProcessInstanceByKey(
"leaveApproval", variables);
return instance.getId();
}
}
@GetMapping("/tasks/{assignee}")
public List<Task> getTasks(@PathVariable String assignee) {
return taskService.createTaskQuery()
.taskAssignee(assignee)
.list();
}
@PostMapping("/complete/{taskId}")
public void completeTask(@PathVariable String taskId) {
taskService.complete(taskId);
}
官方提供的leave-approval.bpmn20.xml包含:
1. 開始事件
2. 用戶任務(提交申請)
3. 排他網關(部門審批)
4. 服務任務(自動通知)
5. 結束事件
<userTask id="deptLeaderVerify"
name="部門領導審批"
activiti:assignee="${applyUserId}_leader">
<extensionElements>
<activiti:formProperty id="approve"
type="boolean"/>
</extensionElements>
</userTask>
@Component
public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
if("submit".equals(delegateTask.getEventName())){
delegateTask.setVariable("submitTime", new Date());
}
}
}
spring.activiti.async-executor-activate=true
spring.activiti.async-executor-core-pool-size=10
通過@RestController暴露流程接口:
@GetMapping("/history/{instanceId}")
public HistoricProcessInstance getHistory(
@PathVariable String instanceId) {
return historyService.createHistoricProcessInstanceQuery()
.processInstanceId(instanceId)
.singleResult();
}
確保在Service層添加@Transactional注解:
@Transactional
public void approveTask(String taskId) {
// 業務邏輯
}
需自定義ProcessEngine配置:
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration(
DataSource dataSource, PlatformTransactionManager transactionManager) {
// 自定義配置
}
通過本文的實踐演示,可以看到Activiti7與SpringBoot2的集成提供了開箱即用的工作流解決方案。官方示例雖簡潔但涵蓋了核心場景,開發者可在此基礎上進行深度定制。建議進一步探索: - 動態表單集成 - 多租戶支持 - 與微服務架構的結合
完整示例代碼可參考官方倉庫:
https://github.com/Activiti/activiti-examples “`
注:本文實際約1500字,可根據需要擴展具體實現細節或補充示意圖。關鍵點已用代碼塊和列表形式突出顯示,符合技術文檔的易讀性要求。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。