Activiti怎么集成?

wen python案例 4

本文目录导读:

Activiti怎么集成?

  1. 核心依赖与环境搭建
  2. 基于 Spring Boot 的自动配置(最推荐方式)
  3. 不使用 Spring Boot 的纯集成(例如 Spring MVC + XML)
  4. 关键集成点:如何让你的业务代码被流程调用?
  5. 前端集成(API 接口)
  6. 版本选择建议

Activiti 的集成通常分为架构集成(将引擎引入你的系统)和业务集成(将引擎能力与你的业务代码结合),根据你使用的框架和版本,集成方式有所不同。

以下是几种主流、详细的集成方案:

核心依赖与环境搭建

pom.xml(Maven)或 build.gradle(Gradle)中添加依赖。

  • Activiti 7 / 8.x (主流):核心依赖非常轻量。

    <!-- Activiti 核心引擎 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter</artifactId>
        <version>7.1.0.M6</version> <!-- 或更新的版本 -->
    </dependency>
    <!-- 如果使用 DMN(决策表) -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-dmn-spring-boot-starter</artifactId>
        <version>7.1.0.M6</version>
    </dependency>
    <!-- 数据库驱动(以 MySQL 为例) -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
  • Activiti 5.x / 6.x (老项目):依赖方式类似,但包名为 org.activiti:activiti-spring-boot-starter-basic

基于 Spring Boot 的自动配置(最推荐方式)

这是目前最简洁、最标准的方式,Activiti 团队已经做好了自动配置。

步骤:

  1. 添加依赖:如上所示。

  2. 配置 application.yml

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/activiti_db?useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
    activiti:
      # 自动部署 resources/processes/ 下的 bpmn 文件
      # 设为 true 则启动时自动部署所有流程定义
      auto-deploy: true
      # 数据库生成策略:true=启动时自动建表/更新表(开发环境)
      # false=不处理(生产环境使用手动脚本建表)
      database-schema-update: true
      # 历史等级:full=记录所有变量、表单等详细信息(生产环境建议 audit)
      history-level: full
      # 关闭 Spring Security 的默认认证(如果你有自己的安全体系)
      # activiti7 默认强制绑定 spring security,可通过此配置解耦
      idm:
        enabled: false
      # 不允许自动生成图数据库(否则会尝试连 neo4j)
      # 如果不需要流程历史图的图形存储,可以关闭
      entity-cache:
        enabled: false
  3. 创建 BPMN 文件: 将你的 .bpmn20.xml 文件放入 src/main/resources/processes/ 目录下,启动项目时,Activiti 会自动扫描并部署。

  4. 注入核心服务:在业务代码中直接注入即可使用。

    @Service
    public class MyWorkflowService {
        @Autowired
        private RuntimeService runtimeService;  // 启动流程、查询、设置变量
        @Autowired
        private TaskService taskService;       // 处理用户任务
        @Autowired
        private RepositoryService repositoryService; // 部署、查询流程定义
        @Autowired
        private HistoryService historyService;  // 查询历史数据
        public void startProcess(String processKey, Map<String, Object> variables) {
            ProcessInstance instance = runtimeService
                    .startProcessInstanceByKey(processKey, variables);
            System.out.println("流程启动,ID: " + instance.getId());
        }
        public List<Task> getTasksForUser(String assignee) {
            return taskService.createTaskQuery()
                    .taskAssignee(assignee)
                    .list();
        }
    }

不使用 Spring Boot 的纯集成(Spring MVC + XML)

如果你还在用比较老的传统 Spring MVC 项目(如 SSM),需要手动配置。

步骤:

  1. 添加依赖:同上。

  2. 创建 activiti-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="...">
        <!-- 1. 数据源 -->
        <bean id="dataSource" class="...">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            ...
        </bean>
        <!-- 2. 事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        <!-- 3. Activiti 流程引擎配置 -->
        <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
            <property name="dataSource" ref="dataSource"/>
            <property name="transactionManager" ref="transactionManager"/>
            <property name="databaseSchemaUpdate" value="true"/>
            <property name="historyLevel" value="full"/>
            <!-- 部署所有资源 -->
            <property name="deploymentResources" value="classpath*:processes/*.bpmn20.xml"/>
        </bean>
        <!-- 4. 流程引擎工厂 -->
        <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
            <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
        </bean>
        <!-- 5. 暴露 Service (RuntimeService, TaskService 等) -->
        <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
        <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
        ...
    </beans>

关键集成点:如何让你的业务代码被流程调用?

Activiti 提供了多种“服务任务(Service Task)”与你的 Java 代码集成的方式:

JavaDelegate 接口(推荐)

// 1. 实现接口
@Component  // 不需要额外配置,因为 Bean 名称就是类名首字母小写(如 myJavaDelegate)
public class MyJavaDelegate implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        System.out.println("流程执行到我的业务方法了");
        // 获取流程变量
        String orderId = (String) execution.getVariable("orderId");
        // 执行业务逻辑
        doSomething(orderId);
        // 设置输出变量
        execution.setVariable("result", "success");
    }
    private void doSomething(String orderId) {
        // 业务代码...
    }
}
// 2. BPMN 文件中使用
// <serviceTask id="serviceTask1" activiti:delegateExpression="#{myJavaDelegate}"/>

@ActivityBean + 方法调用

// 1. 定义一个普通类
@Component
public class BusinessLogic {
    // 方法签名:必须接收 DelegateExecution 参数或业务参数
    public void handlePayment(DelegateExecution execution) {
        // do something
    }
}
// 2. BPMN 中引用
// <serviceTask id="paymentTask" activiti:expression="#{businessLogic.handlePayment(execution)}"/>

前端集成(API 接口)

Activiti 不包含丰富的默认前端,通常你需要自己写前端(Vue/React)来调用后端提供的 API。

  • 官方提供的 REST APIactiviti-spring-boot-starter 默认暴露):
    • POST /runtime/process-instances 启动流程
    • GET /runtime/tasks 查询任务
    • POST /runtime/tasks/xxx/complete 完成任务
  • 自定义 API:通常建议封装一层,暴露给前端更友好的接口,而不是直接使用原生 Activiti API。

版本选择建议

  • 新项目:直接选择 Activiti 7.x 及以上(有时也直接叫 Cloud Native 版本),集成简单,依赖少,不需要单独装数据库表初始化脚本。
  • 老项目升级:注意从 5.x 到 7.x 有很多 API 变化(TaskService 中废弃了部分方法),建议逐步迁移。
  • 区分 Activiti 与 Camunda:如果不需要 Activiti 的特定功能,Camunda 作为 Activiti 的 fork,生态更好、文档更丰富,集成方式几乎一模一样。
集成场景 推荐方案 关键点
新 Spring Boot 项目 添加 activiti-spring-boot-starter,配置 application.yml 自动部署 BPMN、自动建表
老 Spring MVC 项目 手动配置 SpringProcessEngineConfiguration 需要自己写 XML Bean 定义
业务解耦 使用 JavaDelegateExpression 流程与业务代码通过 Bean 名调用
前端交互 自定义 REST API 或使用 Activiti 原生 REST 推荐自定义,更灵活

尝试按第一种方式集成,成功率最高,如果遇到具体报错(比如数据库连接、表不存在、Bean 冲突等),请提供错误信息,可以进一步分析。

抱歉,评论功能暂时关闭!