Spring Boot 集成 Activiti7(7.20)

一、集依赖

在具体的业务子模块(vehicle-cove-business)的 pom.xml 中引入 Activiti7 的依赖

<!--添加activiti和SpringBoot整合的依赖
    MyBatis版本会有冲突,所以需要排除-->
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <version>7.0.0.SR1</version>
    <exclusions>
        <exclusion>
            <artifactId>mybatis</artifactId>
            <groupId>org.mybatis</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!--activiti可以绘制流程的的依赖-->
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-image-generator</artifactId>
    <version>7.0.0.SR1</version>
</dependency>

二、配置application.yml配置文件

application.yml配置文件中添加Activiti7的配置信息

spring:
  activiti:
    database-schema-update: true
    db-history-used: true
    history-level: full
    check-process-definitions: false
    use-strong-uuids: false
  • database-schema-update属性

    1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
    2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
    3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
    4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
    
  • db-history-used

    检测历史表是否存在 activiti7默认没有开启数据库历史记录,true启动数据库历史记录
    
  • history-level

    #记录历史等级 可配置的历史级别有none, activity, audit, full
    1.none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
    2.activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
    3.audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
    4.full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
    
  • check-process-definitions

    #校验流程文件,默认校验resources下的processes文件夹里的流程文件
    
  • use-strong-uuids

    是否使用UUID作为主键生成策略
    

三、解决冲突

(1)解决 Spring Bean 定义冲突

由于 Activiti7 内部自带了一套 Spring Security 配置,而若依(RuoYi)等基础框架本身也包含完善的安全配置,两者同时加载时会导致同名的 Bean(如 methodSecurityInterceptor)在 Spring 容器中发生冲突。

解决方案:在 application.yml 中开启允许 Bean 覆盖的配置,允许后加载的 Bean 覆盖先加载的同名 Bean。

spring:
  main:
  	allow-bean-definition-overriding: true

(2)解决 MySQL 8.x 驱动导致的自动建表失败问题

在 MySQL 8.x 版本的驱动中,Activiti 启动时默认会扫描整个 MySQL 服务器上所有数据库的元数据。如果检测到任意一个库中已经存在 ACT_ 开头的表,Activiti 就会误判“表已存在”,从而跳过自动建表逻辑。这会导致当前连接的数据库中因缺少表而报 Table doesn't exist 错误。

解决方案:在数据库连接 URL 中追加 nullCatalogMeansCurrent=true 参数。

该参数会限制驱动只查询当前连接的数据库(Schema),确保 Activiti 能准确判断当前库是否需要自动建表。

posted on 2026-07-20 17:03  冬冬咚  阅读(16)  评论(0)    收藏  举报