springboot+Activiti7整合实践 (一)

文章目录


前言

前端采用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排除上,但总体没什么难度。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘一线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值