# 如何用Spring Boot + Thymeleaf + Activiti開發平臺項目
## 一、技術棧簡介
### 1. Spring Boot
Spring Boot是快速構建企業級應用的框架,通過自動配置和起步依賴顯著簡化了Spring應用的初始搭建和開發過程。其核心優勢包括:
- 內嵌Tomcat/Jetty服務器
- 自動配置Spring和第三方庫
- 提供生產級監控端點
- 約定優于配置的核心理念
### 2. Thymeleaf
Thymeleaf是現代化的服務端Java模板引擎,主要特點:
- 自然模板技術(HTML原型可直接瀏覽器打開)
- 與Spring生態完美集成
- 支持表達式語言(Spring EL)
- 豐富的模板處理功能
### 3. Activiti
Activiti是輕量級的工作流和業務流程管理(BPM)引擎:
- 基于BPMN 2.0標準
- 提供流程設計器、引擎和API
- 支持任務分配、表單綁定等企業級特性
- 與Spring集成良好
## 二、環境準備
### 1. 開發環境要求
- JDK 1.8+
- Maven 3.5+
- IDE(推薦IntelliJ IDEA)
- MySQL 5.7+/PostgreSQL
### 2. 項目初始化
使用Spring Initializr創建項目,添加依賴:
```xml
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- Activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M6</version>
</dependency>
<!-- 數據庫 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
@Configuration
public class ActivitiConfig {
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration(
DataSource dataSource,
PlatformTransactionManager transactionManager) {
SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDataSource(dataSource);
config.setTransactionManager(transactionManager);
config.setDatabaseSchemaUpdate("true");
config.setAsyncExecutorActivate(true);
return config;
}
}
@RestController
@RequestMapping("/modeler")
public class ModelerController {
@GetMapping("/editor")
public String editor() {
return "modeler/editor";
}
}
<!-- resources/templates/task/form.html -->
<form th:action="@{/complete-task}" method="post">
<input type="hidden" name="taskId" th:value="${task.id}">
<div class="form-group">
<label>審批意見</label>
<textarea name="comment" class="form-control"></textarea>
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
BPMN流程圖關鍵節點: - 開始事件 - 用戶任務(員工提交、經理審批、HR備案) - 排他網關(判斷請假天數) - 結束事件
Java服務層實現:
@Service
public class LeaveService {
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
public void startProcess(LeaveRequest request) {
Map<String, Object> variables = new HashMap<>();
variables.put("days", request.getDays());
variables.put("applicant", request.getApplicant());
runtimeService.startProcessInstanceByKey(
"leaveProcess",
variables);
}
}
@GetMapping("/tasks")
public String taskList(Model model,
@AuthenticationPrincipal User user) {
List<Task> tasks = taskService.createTaskQuery()
.taskCandidateOrAssigned(user.getUsername())
.list();
model.addAttribute("tasks", tasks);
return "task/list";
}
@Bean
public CommandLineRunner initGroups(IdentityService identityService) {
return args -> {
if(identityService.createGroupQuery().count() == 0) {
identityService.saveGroup(
identityService.newGroup("deptLeader")
.name("部門經理")
.type("approver"));
}
};
}
@GetMapping("/diagram/{processInstanceId}")
public void getDiagram(HttpServletResponse response,
@PathVariable String processInstanceId) throws IOException {
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
BpmnModel model = repositoryService.getBpmnModel(pi.getProcessDefinitionId());
ProcessDiagramGenerator diagramGenerator = processEngineConfiguration
.getProcessDiagramGenerator();
InputStream is = diagramGenerator.generateDiagram(
model,
runtimeService.getActiveActivityIds(processInstanceId));
IOUtils.copy(is, response.getOutputStream());
}
# application-prod.yml
spring:
datasource:
url: jdbc:mysql://prod-db:3306/workflow
username: prod_user
password: securepass
activiti:
database-schema-update: false
check-process-definitions: true
本文介紹了基于Spring Boot+Thymeleaf+Activiti的技術組合開發工作流平臺的關鍵實現步驟。這種技術組合具有以下優勢:
完整示例代碼可參考GitHub倉庫:示例項目鏈接
注意:實際開發中應根據業務需求調整流程設計和權限控制,建議結合Spring Security實現細粒度的訪問控制。 “`
(全文約1350字,實際字數可能因格式調整略有變化)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。