前后端分离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的任务管理、用户任务以及与前端的更复杂交互,敬请期待!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部