当前位置 博文首页 > 盛夏温暖流年:springBoot集成Activiti6

    盛夏温暖流年:springBoot集成Activiti6

    作者:[db:作者] 时间:2021-07-13 21:42

    数据库:mysql

    IDE:Spring Tool Suite

    build工具:Maven

    项目版本:springBoot1.5.10 + JDK1.8 + Maven3.0.5
    (之前用的是2.0.0版本的springBoot,集成activiti6后启动一直报错,最后发现是版本问题,改为1.5.10就可以了,迷之崩溃o(╥﹏╥)o)

    一.构建springBoot

    1.创建项目

    (1)使用idea创建springboot项目很快,可参考如下链接:
    https://www.cnblogs.com/winner-0715/p/6666302.html

    (2)使用eclipse安装STS插件的方式,参考链接:
    https://blog.csdn.net/clementad/article/details/51334064
    (可能我的eclipse比较调皮,STS插件安装一直没配置成功,so我直接下载了STS

    (3)STS下载地址:
    http://spring.io/tools/sts/all

    使用STS创建项目:

    新建项目–选择Spring Boot下的Spring Starter Project–Next

    这里写图片描述
    这里写图片描述
    选择SpringBoot的版本:
    这里写图片描述
    创建成功后的目录结构:
    这里写图片描述
    给pom.xml添加以下依赖:

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    </dependency>
    

    2.运行项目

    找到整个项目的入口类:MiaoApplication
    这里写图片描述
    这个类有一个@SpringBootApplication注解,这是整个Spring Boot的核心注解,它的目的就是开启Spring Boot的自动配置。需要在这个类上再添加一个@RestController注解,使之变为一个Controller,然后里边提供一个地址转换方法,如下:

    @RestController
    @SpringBootApplication 
    public class MiaoApplication {
    public static void main(String[] args){ 
    SpringApplication.run(MiaoApplication.class, args); 
    } 
    @GetMapping(value = "/") 
    String index(){
    return "Hello Spring Boot!"; 
    } 
    }
    

    然后运行项目,控制台没有报错信息就说明成功了,在浏览器上可以直接访问:
    这里写图片描述

    二.Activiti6安装运行

    1.下载和安装Activiti6

    链接: https://pan.baidu.com/s/1livSJdUm3doUzBZI5AKJWA
    密码: 2qza
    解压后发现一共有三个子目录:database,libs,wars,各个目录的作用描述如下:
    这里写图片描述
    2.使用tomcat配置与运行

    wars目录下的三个war包默认使用的是h2内存数据库,重启服务器数据就会消失。将3个war包复制到tomcat的webapps的目录下,更改tomcat的server.xml文件的Context 为:

    <Context docBase="F:\apache-tomcat-7.0.59\webapps\activiti-app.war" path="/" reloadable="true"/>
    

    然后双击bin目录下的startup.bat文件启动tomcat,打开浏览器即可访问:
    (用户名:admin;密码:test)
    这里写图片描述
    **PS:**如果你的startup.bat双击后自动关闭了,有可能和我一样是java.lang.OutOfMemoryError异常,需要在bin/catalina.bat文件中找到以下一行:

    echo Using CATALINA_BASE:   "%CATALINA_BASE%"
    

    在这行的上面添加:

    set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
    

    重新运行startup.bat即可。

    三.Activiti6的使用

    Activiti官方发布的activiti-app可以说是一个较为完善的样例,可以通过它来了解Activiti的大部分功能。
    登录成功后,可以看到有三个不同的模块:

    这里写图片描述
    这里写图片描述

    下面我们以请假为例,定义一个工作流程。我们知道,请假流程中涉及到的人员有员工和主管,那么首先需要新建这两种类型的用户,之后定义请假流程。

    1.新建用户

    点击Idennity management,进入Users模块,点击“Create user”按钮新建需要请假的员工:
    这里写图片描述
    2.定义流程

    点击Kickstart app,进入Processes,点击“Create Process”创建流程。
    流程创建完毕会自动进入流程编辑界面,会有提示告诉你怎么用,超贴心~
    通过鼠标拖拉,即可完成一个流程的定义:
    这里写图片描述
    我们定义了一个开始事件和一个结束事件以及两个用户任务,我们需要把用户任务分配给对应的人员。
    点击第一个用户任务“提出请假申请”,修改它的“Assignment”属性,将当前任务分配给Employee:
    这里写图片描述
    同样,需要把第二个用户任务分配给manager。任务分配成功后,点击左上角的保存按钮保存当前流程。

    3.发布流程

    在activiti-app中,一个App可以包含多个流程模型,因此在发布流程前,需要新建一个App并设置它的流程模型。
    点击Apps菜单下的“Create App”按钮,创建App:
    这里写图片描述
    创建完成后,将之前创建的流程绑定到该App上,之后发布该App:
    这里写图片描述
    发布成功后,使用Employee账号登录,可以看到发布成功的HR App,进入该App,点击Processes菜单,可以看到“Start a process”按钮,点击后即可启动一个请假流程。
    这里写图片描述
    启动后就由employee用户完成第一个请假申请:
    这里写图片描述
    之后可登录manager用户进行审核操作,同样点击HR App,进入后点击Processes菜单,以同样方式操作完成任务后,该流程结束。

    四.Spring Tool Suite中使用Activiti6

    1.修改配置文件application.properties,保存为application.yml
    spring:
    datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring-boot-activiti?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password:
    jpa:
    show-sql: true
    记得新建一个对应的数据库:spring-boot-activiti~

    2.在pom.xml中添加Activiti6的依赖

    前端使用了thymeleaf模板进行展示,因此也需要引入它的依赖:

    <dependency>
    	<groupId>org.activiti</groupId>
    	<artifactId>activiti-spring-boot-starter-basic</artifactId>
    	<version>6.0.0</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    3.在资源目录下创建processes目录

    用于保存.bpmn后缀的流程图,这个目录名千万不要手抖打错了,相信我,程序一定会报错的~
    这里写图片描述
    4.安装Activiti插件
    https://blog.csdn.net/qq_33547950/article/details/54926435

    5.在processes文件下新建bpmn文件
    这里写图片描述
    6.使用Activiti插件设计流程图
    这里写图片描述

    需要在IDE里调出properties面板配置参数:

    1).General配置Id和文字,注意Id不能重复;
    这里写图片描述
    2)Main config里面配置当前任务的代理人Assignee;
    这里写图片描述
    3)Candidate users可以配置当前任务的候选人组,具体应用场景:
    当审核者有两个或多个以上,请假申请提交到他们手上后,有一个人认领了该任务,即代表申请被审批通过,这种情况下就需要使用候选人组配置。
    这里写图片描述
    对于有两个出口连线的任务,我们通过设置连线flow的流程变量的方式来自动控制流程的流转:
    这里写图片描述
    7.编写流程代码
    这里写图片描述
    说明:

    1. com.example.MiaoApplication包含了当前demo的主要功能:
      登录;退出;添加请假单;放弃请假;申请请假;审核请假;获取请假状态;获取请假流程。

    2. com.example.controller.MiaoController包含了三个页面请求,分别为:
      申请人主页面,审核人主页面,请假单填写页面;

    3. com.example.entity包含了两个表:
      User表:用于存放当前用户,登录验证之前,需要手动在该表内加入信息,示例如下(type为1代表申请人,2代表审核人):
      这里写图片描述
      VacationForm表:用于存放请假信息;

    4. com.example.service包含了三个service:
      MiaoService:业务流程操作接口;
      UserService:用户表操作接口,继承了JpaRepository;
      VacationFormService:请假表操作接口,继承了JpaRepository;

    5. com.example.serviceImpl中的MiaoServiceImpl是对MiaoService接口的实现。具体细节都标注在了代码注释里,代码已上传git:
      https://github.com/jichunyang19931023/ActivitiWithSpringBoot

    补充:
    1.本demo的用户登录信息存储在cookie里,实际场景下可以考虑存放在Redis里;
    2.数据库操作使用了SpringData的JpaRepository,实现的时候只需写一个继承JpaRepository的类,需要给出实体类名和主键类型。
    这里写图片描述
    3.启动Spring Boot工程,默认会自动部署相应路径下流程定义文件;自动创建Activiti ProcessEngine Bean;自动注册Activiti Service;创建Job Executor。所以我们不用像网上的大多数教程那样配置引擎,直接使用对应的服务即可:
    这里写图片描述

    以上配置教程个人原创,有理解不对的地方欢迎提出建议~??ヽ(°▽°)ノ?


    欢迎关注我的公众号,用讲故事的方式学技术。

    这里有脑洞大开的奇葩故事,也有温暖文艺的心灵感悟。

    技术知识,也可以很有趣。
    在这里插入图片描述

    cs