springBoot集成Activiti6

数据库: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集成Activiti6_第1张图片
springBoot集成Activiti6_第2张图片
选择SpringBoot的版本:
springBoot集成Activiti6_第3张图片
创建成功后的目录结构:
springBoot集成Activiti6_第4张图片
给pom.xml添加以下依赖:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
dependency>

2.运行项目

找到整个项目的入口类:MiaoApplication
springBoot集成Activiti6_第5张图片
这个类有一个@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!"; 
} 
}

然后运行项目,控制台没有报错信息就说明成功了,在浏览器上可以直接访问:
springBoot集成Activiti6_第6张图片

二.Activiti6安装运行

1.下载和安装Activiti6

链接: https://pan.baidu.com/s/1livSJdUm3doUzBZI5AKJWA
密码: 2qza
解压后发现一共有三个子目录:database,libs,wars,各个目录的作用描述如下:
springBoot集成Activiti6_第7张图片
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)
springBoot集成Activiti6_第8张图片
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的大部分功能。
登录成功后,可以看到有三个不同的模块:

springBoot集成Activiti6_第9张图片
springBoot集成Activiti6_第10张图片

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

1.新建用户

点击Idennity management,进入Users模块,点击“Create user”按钮新建需要请假的员工:
springBoot集成Activiti6_第11张图片
2.定义流程

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

3.发布流程

在activiti-app中,一个App可以包含多个流程模型,因此在发布流程前,需要新建一个App并设置它的流程模型。
点击Apps菜单下的“Create App”按钮,创建App:
springBoot集成Activiti6_第14张图片
创建完成后,将之前创建的流程绑定到该App上,之后发布该App:
springBoot集成Activiti6_第15张图片
发布成功后,使用Employee账号登录,可以看到发布成功的HR App,进入该App,点击Processes菜单,可以看到“Start a process”按钮,点击后即可启动一个请假流程。
springBoot集成Activiti6_第16张图片
启动后就由employee用户完成第一个请假申请:
springBoot集成Activiti6_第17张图片
之后可登录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.activitigroupId>
    <artifactId>activiti-spring-boot-starter-basicartifactId>
    <version>6.0.0version>
dependency>
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-thymeleafartifactId>
dependency>

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

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

5.在processes文件下新建bpmn文件
springBoot集成Activiti6_第19张图片
6.使用Activiti插件设计流程图
springBoot集成Activiti6_第20张图片

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

1).General配置Id和文字,注意Id不能重复;
springBoot集成Activiti6_第21张图片
2)Main config里面配置当前任务的代理人Assignee;
springBoot集成Activiti6_第22张图片
3)Candidate users可以配置当前任务的候选人组,具体应用场景:
当审核者有两个或多个以上,请假申请提交到他们手上后,有一个人认领了该任务,即代表申请被审批通过,这种情况下就需要使用候选人组配置。
springBoot集成Activiti6_第23张图片
对于有两个出口连线的任务,我们通过设置连线flow的流程变量的方式来自动控制流程的流转:
springBoot集成Activiti6_第24张图片
7.编写流程代码
springBoot集成Activiti6_第25张图片
说明:
1) com.example.MiaoApplication包含了当前demo的主要功能:
登录;退出;添加请假单;放弃请假;申请请假;审核请假;获取请假状态;获取请假流程。

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

3) com.example.entity包含了两个表:
User表:用于存放当前用户,登录验证之前,需要手动在该表内加入信息,示例如下(type为1代表申请人,2代表审核人):
springBoot集成Activiti6_第26张图片
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的类,需要给出实体类名和主键类型。
springBoot集成Activiti6_第27张图片
3.启动Spring Boot工程,默认会自动部署相应路径下流程定义文件;自动创建Activiti ProcessEngine Bean;自动注册Activiti Service;创建Job Executor。所以我们不用像网上的大多数教程那样配置引擎,直接使用对应的服务即可:
springBoot集成Activiti6_第28张图片

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

你可能感兴趣的:(java,SpringBoot,Activiti)