文章目录
前言
前端采用vue2,后端采用公司基础框架,springboot版本2.7.9,activit7版本 7.1.0.M4,主要借鉴ruoyi及芋道的工作流功能,完成工作流的定义、发布、流程启动、审批、转班、回退等功能。
一、springboot整合activiti7
此章节首先完成后端的activiti整合,生成工作流所需数据库表,数据库采
用mysql。
二、使用步骤
1.引入依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M4</version>
<exclusions>
<exclusion>
<artifactId>mybatis</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
</exclusions>
</dependency>
首先排除掉mybatis依赖,因为公司使用的mybatisplus依赖都已引入,其次因为引入的公司基础框架,与activit7的maven依赖有冲突,比如springboot的版本,解决依赖冲突主要遵循就近原则,所以一般就将冲突的依赖声明引入一下,或者排除,这里springboot版本的处理方式如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.9</version>
</parent>
2.配置文件修改
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
#记录历史等级 可配置的历史级别有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
此处是spring与activit7整合的配置,并不是必须的,没错,springboot有一套自动配置的默认流程,可以生成工作流所需的引擎等关键对象,db-history-userd和history-level,建议按图中配置,方便查询工作流历史记录。
这个配置后面我单独写了一个xml配置文件代替,因为不想使用默认的配置流程,后面文章会再详细说明。
3.相关java文件修改
(1) 启动文件
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
启动类修改,排除以上类,因为activiti7深度依赖springSecurity,而公司安全框架用的是shiro,故排除。
(2)SpringSecurityConfig.java
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
}
一个空的springSecrity配置文件,不加会报错
(3)实现UserDetailsService接口
@Slf4j
@Component
public class SelfUserDetailsServiceImpl implements UserDetailsService {
private final SysUserExtService userService;
public SelfUserDetailsServiceImpl(SysUserExtService userService) {
this.userService = userService;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//return userService.getUserExtByLoginNameSecurity(username);
List<GrantedAuthority> authorities= AuthorityUtils.commaSeparatedStringToAuthorityList("");
return new User(username,"",authorities);
}
}
知道springSecurity框架的都知道,这是搭建中都要实现的接口,是springSecurity获得用户信息用来验证用户信息及权限的重要方法,这里直接使用用户名和空的权限生成UserDetails,因为也用不上。
前面提到排除springSecurity,而至于为什么还有(2)(3)两个步骤,个人以为可能还没有完全排除掉,时间关系,没做深究,希望大佬解惑,先行谢过,抱拳了。
4.启动项目,生成工作流数据库表
运行springboot项目启动类,第一次运行,会检查数据库是否有工作流所需表,如果没有,会自动生成,生成的表都act_开头,一共25张表,这里做一下基础介绍。
工作流相关表分为4类
第一类:act_ge开头,存放通用数据、一些流程文件等
第二类:act_hi开头,存放工作流程中的历史数据,如历史任务信息,历史流程参数等
第三类:act_re开头,存放工作流流程定义和发布的信息
第四类:act_ru开头,存放工作流当前正在进行流程的信息,一个流程走完,ru表会删除相关内容,查询历史信息就是act_hi中获取
补充,自动生成数据库表完成后,运行一下两句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;
总结
这里是springboot+activiti简单整合的步骤,其中遇到很多问题,主要集中在依赖冲突、springsecurity排除上,但总体没什么难度。