springBoot集成Activiti6.0

原文地址:https://blog.csdn.net/j1231230/article/details/79880748

数据库: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。所以我们不用像网上的大多数教程那样配置引擎,直接使用对应的服务即可: 

这里写图片描述
以上配置教程个人原创,有理解不对的地方欢迎提出建议~✿✿ヽ(°▽°)ノ✿

猜你喜欢

转载自blog.csdn.net/qq_19734597/article/details/84249936