工作流开发基石(一)—— SpringCloud集成Activiti 6.0.0

1,380 阅读1分钟

版本

  • SpringCloud (或 SpringBoot)

  • Activiti 6.0.0

集成步骤

  1. Activiti 为SpringCloud/SpringBoot提供了开箱即用的Starter,只需要在pom中引用即可。
 <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>6.0.0</version>
 </dependency>
  1. 修改yml配置文件,添加Acticity相关配置
spring:
  activiti:
    check-process-definitions: false  # 默认不检查process资源文件
    database-schema-update: true      # 自动更新数据库
    history-level: full               # 历史记录级别
    db-history-used: true             # 是否记录历史
  1. 启动Boot的Application类,理论上会自动创建act_打头的数据库表,即为集成成功。

坑点

  1. 与SpringSecurity冲突

如果项目内使用的是SpringSecurity作为安全框架,Activiti内也自己集成了这个,需要在启动类上排除一个

import org.activiti.spring.boot.SecurityAutoConfiguration;

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
  1. 与mybaits冲突

如果项目原本就使用mybaits持久化,也可能会与activiti冲突,表现为:

Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location: org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:564)
The following method did not exist:
org.apache.ibatis.session.Configuration.setDefaultEnumTypeHandler(Ljava/lang/Class;)V
The method's class, org.apache.ibatis.session.Configuration, is available from the following locations: jar:file:/C:/Users/pactera/.m2/repository/org/mybatis/mybatis/3.4.2/mybatis-3.4.2.jar!/org/apache/ibatis/session/Configuration.class
The class hierarchy was loaded from the following locations:
org.apache.ibatis.session.Configuration:file:/C:/Users/pactera/.m2/repository/org/mybatis/mybatis/3.4.2/mybatis-3.4.2.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of org.apache.ibatis.session.Configuration

解决办法是在引用Activiti时排除其自身带的包

 <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>${activiti.version}</version>
            <exclusions>
                <exclusion>
             		 <groupId>org.mybatis</groupId>
            		<artifactId>mybatis</artifactId>
       			 </exclusion>
            <!-- <exclusion>
                 <groupId>javax.el</groupId>
                 <artifactId>el-api</artifactId>
             </exclusion>-->
            </exclusions>
 </dependency>
  1. el-api 冲突:原理与上面类似,排除包即可
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>${activiti.version}</version>
    <exclusions>
        <exclusion>
             <groupId>javax.el</groupId>
             <artifactId>el-api</artifactId>
         </exclusion>
    </exclusions>
</dependency>
  1. 不自动建表

理论上初次启动SpringBootApplication时会自动创建表,但是Oracle试了好像不可以,不自动创建的话自己手动去源码包里运行下脚本

image.png