手把手教你用Spring Boot 3集成Activiti 7:一个云原生流程引擎的‘Hello World’

发布时间:2026/6/14 4:45:17

手把手教你用Spring Boot 3集成Activiti 7:一个云原生流程引擎的‘Hello World’ 云原生时代的工作流引擎实践Spring Boot 3与Activiti 7深度整合指南当传统单体应用架构逐渐向云原生转型时工作流引擎作为企业级应用的核心组件也面临着全新的技术挑战。本文将带您从零开始在Spring Boot 3环境中搭建Activiti 7 Runtime Bundle通过一个完整的请假流程示例体验新一代流程引擎的云原生特性。1. 环境准备与项目初始化在开始之前我们需要准备以下基础环境JDK 17或更高版本Spring Boot 3的最低要求Docker Desktop或Minikube用于本地Kubernetes环境IntelliJ IDEA或VS Code推荐使用最新版本使用Spring Initializr创建项目时需要特别注意以下依赖选择curl https://start.spring.io/starter.tgz \ -d dependenciesweb,activiti,data-jpa,h2 \ -d javaVersion17 \ -d packagingjar \ -d typegradle-project \ -d bootVersion3.2.0 \ -d groupIdcom.example \ -d artifactIdactiviti-demo \ -d nameactiviti-demo \ -o activiti-demo.zip关键依赖说明依赖项作用版本要求activitiActiviti核心库7.1.0.M6webSpring Web MVC支持自动匹配>SpringBootApplication EnableActiviti public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } Bean public CommandLineRunner init(RepositoryService repositoryService) { return args - { repositoryService.createDeployment() .addClasspathResource(processes/leave-request.bpmn20.xml) .deploy(); }; } }3. 构建请假流程的完整实现让我们创建一个简单的请假审批流程包含以下节点员工提交请假申请部门经理审批人事部门备案流程结束对应的BPMN文件(leave-request.bpmn20.xml)关键内容process idleaveRequest nameLeave Request Process startEvent idstartEvent / userTask idsubmitRequest nameSubmit Leave Request activiti:assignee${employeeId} / userTask idmanagerApproval nameManager Approval activiti:candidateGroupsmanagers / serviceTask idhrRecord nameHR Record activiti:classcom.example.HRServiceTask / endEvent idendEvent / sequenceFlow sourceRefstartEvent targetRefsubmitRequest / sequenceFlow sourceRefsubmitRequest targetRefmanagerApproval / sequenceFlow sourceRefmanagerApproval targetRefhrRecord / sequenceFlow sourceRefhrRecord targetRefendEvent / /process实现服务任务的Java类示例public class HRServiceTask implements JavaDelegate { Override public void execute(DelegateExecution execution) { String employeeId (String) execution.getVariable(employeeId); Integer leaveDays (Integer) execution.getVariable(leaveDays); // 实际项目中这里会调用HR系统API System.out.printf(Recording leave for %s: %d days%n, employeeId, leaveDays); } }4. 与Kubernetes的深度集成实践Activiti 7设计时就考虑了与Kubernetes的深度集成。以下是在Minikube环境中部署的典型配置首先创建Deployment配置apiVersion: apps/v1 kind: Deployment metadata: name: activiti-runtime-bundle spec: replicas: 2 selector: matchLabels: app: activiti-runtime template: metadata: labels: app: activiti-runtime spec: containers: - name: runtime-bundle image: alfresco/activiti-cloud-runtime-bundle:7.1.0 ports: - containerPort: 8080 env: - name: SPRING_CLOUD_KUBERNETES_CONFIG_NAME value: activiti-cloud-runtime-bundle然后创建Service配置apiVersion: v1 kind: Service metadata: name: activiti-runtime-service spec: selector: app: activiti-runtime ports: - protocol: TCP port: 80 targetPort: 8080最后创建ConfigMap存储应用配置apiVersion: v1 kind: ConfigMap metadata: name: activiti-cloud-runtime-bundle data: application.yaml: | spring: datasource: url: jdbc:postgresql://activiti-db:5432/activiti username: activiti password: activiti activiti: cloud: service-name: runtime-bundle注意生产环境中应使用Secret存储敏感信息此处仅为演示简化配置。5. 版本演进与选型建议从技术演进角度看各版本主要差异如下特性Activiti 5/6Activiti 7架构风格单体应用云原生微服务部署方式WAR包/嵌入式Docker/Kubernetes扩展性垂直扩展水平扩展依赖管理集中式分布式监控能力基础JMX集成Prometheus/Grafana对于技术选型建议考虑以下因素团队技术储备需要熟悉Kubernetes和微服务架构项目规模中小型项目可能不需要完整的云原生方案维护成本分布式系统运维复杂度显著提高功能需求确认所需BPMN元素是否被支持在实际项目中我们发现Activiti 7特别适合以下场景已有Kubernetes基础设施的企业需要与现有微服务深度集成的系统高并发、高可用的关键业务流程需要灵活扩展的业务场景// 查询用户任务的示例代码 ListTask tasks taskService.createTaskQuery() .taskCandidateGroup(managers) .processDefinitionKey(leaveRequest) .list(); tasks.forEach(task - { MapString, Object variables taskService.getVariables(task.getId()); System.out.println(Pending leave request: variables.get(leaveReason)); });6. 调试与性能优化技巧在开发过程中以下几个工具可以极大提升效率Activiti ModelerWeb版的流程设计器Spring Boot Actuator监控端点management.endpoints.web.exposure.includehealth,info,activitiMicrometer指标收集Bean public MeterRegistryCustomizerMeterRegistry metricsCommonTags() { return registry - registry.config().commonTags(application, leave-system); }性能优化建议为Runtime Bundle配置合适的资源限制使用连接池管理数据库连接对高频查询实现缓存层合理设置流程实例的存活时间常见问题排查方法检查Kubernetes Pod日志kubectl logs -f pod-name验证服务发现是否正常工作检查网络策略是否允许服务间通信确认配置是否正确加载在本地开发时可以通过以下命令快速测试Kubernetes集成minikube start eval $(minikube docker-env) docker build -t activiti-demo . kubectl apply -f k8s/

相关新闻