前后端分离Spring Boot整合Activiti 7教程(一)
在当前微服务架构和前后端分离的开发趋势下,Activiti作为一个轻量级的工作流引擎,提供了强大的流程管理功能。本文将详细介绍如何在Spring Boot应用中使用Activiti 7,并实现前后端分离的设计。
环境准备
1. 项目结构
使用Spring Initializr生成一个基础的Spring Boot项目,添加以下依赖:
- Spring Web
- Spring Data JPA
- PostgreSQL(或其他数据库)
- Activiti Spring Boot Starter
2. Maven依赖
在pom.xml
中添加Activiti相关的依赖:
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0</version> <!-- 注意版本 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.19</version>
</dependency>
3. 数据库配置
在application.yml
中配置数据库连接:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/activiti_db
username: your_username
password: your_password
jpa:
hibernate:
ddl-auto: update
show-sql: true
Activiti配置
4. Activiti配置类
创建一个配置类,用于配置Activiti引擎:
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ActivitiConfig {
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration() {
SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDatabaseSchemaUpdate("true");
config.setDataSource(dataSource());
return config;
}
// 这里省略 DataSource Bean 的配置,可以使用 Spring Boot 自动配置
}
5. 流程定义
在resources/processes
文件夹下创建一个流程定义文件,命名为myProcess.bpmn20.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="http://www.activiti.org/test">
<process id="myProcess" name="My Process" isExecutable="true">
<startEvent id="startEvent"/>
<sequenceFlow id="flow" sourceRef="startEvent" targetRef="endEvent"/>
<endEvent id="endEvent"/>
</process>
</definitions>
业务逻辑
6. 流程服务
创建一个服务类来启动和管理流程实例:
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ProcessService {
@Autowired
private RuntimeService runtimeService;
public ProcessInstance startProcess() {
return runtimeService.startProcessInstanceByKey("myProcess");
}
}
7. 控制器
创建一个REST控制器来处理流程启动请求:
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProcessController {
@Autowired
private ProcessService processService;
@GetMapping("/start")
public String startProcess() {
ProcessInstance processInstance = processService.startProcess();
return "Process started with ID: " + processInstance.getId();
}
}
前端部分
8. 前端请求示例
下面是一个简单的前端代码(使用Axios)来发送启动流程的请求:
axios.get('http://localhost:8080/start')
.then(response => {
console.log("Response:", response.data);
})
.catch(error => {
console.error("Error starting process:", error);
});
总结
至此,我们完成了一个简单的Spring Boot应用,成功地整合了Activiti 7,并实现了前后端分离的架构设计。可以通过访问http://localhost:8080/start
来启动流程,该请求会返回流程实例ID。
接下来的教程中,我们将深入探讨Activiti的任务管理、用户任务以及与前端的更复杂交互,敬请期待!