jeecgboot3.6.1集成activiti7工作流引擎

850 阅读2分钟

引言

Activiti7 是一个开源的工作流引擎,它基于Java语言,能够支持BPMN 2.0规范,适用于各种业务流程的管理和自动化。它允许开发人员将业务流程定义在BPMN文件中,然后通过Activiti7引擎执行这些流程。
本文记录如何jeecgboot3.6.1集成activiti7版本。实现工作流业务开发。
Activiti 官网传送门:www.activiti.org
BPMN在线建模
jeecgflow演示站

集成步骤

  • jeecgboot父pom文件,追加maven依赖。
<dependencyManagement>
    <dependencies>
        <!--以下是所需的依赖文件-->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.0.0.Beta2</version>
            <exclusions>
                <exclusion>
                    <!-- 重点坑,不排除mybatis的话,在启动项目时会报错mybatisplus缺少类   -->
                    <artifactId>mybatis</artifactId>
                    <groupId>org.mybatis</groupId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>
</dependencyManagement>
  • jeecg-module-activit模块的依赖
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <!-- 重点坑,不排除mybatis的话,在启动项目时会报错mybatisplus缺少类   -->
            <artifactId>mybatis</artifactId>
            <groupId>org.mybatis</groupId>
        </exclusion>
    </exclusions>
</dependency>
  • application.yml
spring:
    activiti:
        #1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
        #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
        #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
        #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
        database-schema-update: true
        # 检测历史信息表是否存在,activiti7默认不生成历史信息表,开启历史表
        db-history-used: true
        # 历史记录存储等级
        history-level: full
        check-process-definitions: true
  • mysql配置->nullCatalogMeansCurrent=true
url: jdbc:mysql://rxxx/jeecg-camunda?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
//需要在尾部追加nullCatalogMeansCurrent=true
//如果不追加, 可能会出现cause: java.sql.SQLSyntaxErrorException: Table 'jeecg-camunda.act_ge_property' doesn't exist
  • Activiti7 中自带的 Security 安全框架排除掉(因为我这里使用的是 Shiro 安全框架,Security 就没什么用处了)
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class,
        SecurityAutoConfiguration.class,
        ManagementWebSecurityAutoConfiguration.class})
public class OAApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(OAApplication.class, args);
        System.out.println("启动成功~");
    }
}

上面排除 Security 安全框架的操作对于 Activiti 7.1.0.M6 这个版本是没用的,
因为这个版本的代码强引用了 SpringSecurity 里的内容,
比如在 Activiti 的 SpringBoot 配置类中,强引用 UserDetailsService,
没有这个就会报错,所以我们还需要把版本降到7.1.0.M4及以下。
  • 异常情况
caused by: java.lang.illegalargumentexception: property 'sqlsessionfactory' or 'sqlsessiontemplate' are required

the bean 'methodsecurityinterceptor', defined in class path resource [org/activiti/spring/boot/methodsecurityconfig.class], could not be registered. a bean with that name has already been defined in class path resource [org/springframework/security/config/annotation/method/configuration/globalmethodsecurityconfiguration.class] and overriding is disabled.

//解决办法在application.yml中,添加如下配置文件.
spring:
  main:
    allow-bean-definition-overriding: true

jeecgboot3.6.1集成flowable
jeecgboot3.6.1集成camunda