一、Spring Boot 集成 Activiti7(工作流)
此章节首先完成后端的activiti整合,生成工作流所需数据库表,数据库采用mysql。
二、依赖
<dependencies>
<!-- 引入Activiti7 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M4</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0.M4</version>
<type>pom</type>
</dependency>
<!-- 生成流程图 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
<version>7.1.0.M4</version>
</dependency>
</dependencies>
首先排除掉mybatis依赖,因为使用的mybatis-plus依赖我们大部分都已引入,为了避免与activit7的maven依赖有冲突
三、配置文件修改
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: "xxxxx"
url: jdbc:mysql://localhost:3306/activity-demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
activiti:
#1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
#2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
#3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
#4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
database-schema-update: true
#检测历史表是否存在 activiti7默认没有开启数据库历史记录 启动数据库历史记录
db-history-used: true
#记录历史等级 可配置的历史级别有none, activity, audit, full
#none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
#activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
#audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
#full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
history-level: full
#校验流程文件,true表示自动部署resources下的processes文件夹里的流程文件
check-process-definitions: false
# id值是否使用uuid,false表示使用数据库自增值
use-strong-uuids: true
springBoot启动类修改
-
排除
springSecurity
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
启动类修改,排除以上类,因为activiti7深度依赖springSecurity,而我们这里不需要,故排除。
-
SpringSecurityConfig.java
一个空的springSecrity配置文件,不加会报错
@Configuration public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { }
-
实现UserDetailsService接口
@Slf4j @Component public class SelfUserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { List<GrantedAuthority> authorities= AuthorityUtils.commaSeparatedStringToAuthorityList(""); return new User(username,"",authorities); } }
这里排除SpringSecurity的方法略显丑陋,如果有更好的排除SpringSecurity的方法可以教一下我
初始化数据表
运行springboot项目启动类,第一次运行,会检查数据库是否有工作流所需表,如果没有,会自动生成,生成的表都act_开头,一共25张表,这里做一下基础介绍。
工作流相关表分为4类
-
act_ge开头,存放通用数据、一些流程文件等
-
act_hi开头,存放工作流程中的历史数据,如历史任务信息,历史流程参数等
-
act_re开头,存放工作流流程定义和发布的信息
-
act_ru开头,存放工作流当前正在进行流程的信息,一个流程走完,ru表会删除相关内容,查询历史信息就是act_hi中获取
注意:7.1.0.M4 版本自动生成的表字段不全,所以还需运行如下SQL:
-- 修复Activiti7的M4版本缺失字段Bug
-- ----------------------------
alter table ACT_RE_DEPLOYMENT add column PROJECT_RELEASE_VERSION_ varchar(255) DEFAULT NULL;
alter table ACT_RE_DEPLOYMENT add column VERSION_ varchar(255) DEFAULT NULL;