一、Activiti基本概念
流程定义:就是流程图(bpmn文件)
流程实例:流程定义的每个具体实现
流程定义与流程实例的关系就像类和对象的关系,一个类可以有多个对象,一个流程定义可以有多个流程实例。
bpmn:流程图,下图就是一个bpmn文件生成的图片
二、Acitiviti插件的安装以及创建流程定义(idea中)
1、idea中工作流插件的安装
两种安装方式:通过idea的Plugins安装actiBPM插件(需要连接外网)或者直接在idea官网直接下载然后导入。
1.1、在idea的Plugins中下载(若一直无法下载,则通过第二种方法下载):
1.2、登录idea插件官网搜索下载:http://plugins.jetbrains.com/,然后idea导入
2、idea中创建流程定义(也就是流程图)
然后就可以画图了,但是画图之后,没有连接图标怎么办呢?
把鼠标放在开头的那个图标上,此时光标的形状改变了, 拖到另一个上面,连接成功了。
怎么连接成功的呢? 把鼠标放到图标的正中心,然后会看到光标变成了“扇子类型”的样子(黑白相间)。只要看到变成这个样子,就可以拖动到另一个图标中,进行连接了
画完图后,但是并没有生成png图片,这个时候重命名刚才创建的文件,把后缀改成xml,然后右键
然后保存到与刚才创建文件的一个文件夹内就可以了
保存图片后,若发现图片中文乱码,解决方法:
找到IDEA的安装目录,找到bin目录,比如我的路径:D:\JetBrains\IntelliJ IDEA 2017.3\bin,找到这两个文件
具体要修改哪个文件,由你安装的IDEA的版本来决定,如果你安装了64位版本的IDEA,那么就修改
这个文件,反之亦然,两个都修改也可以,
具体修改的方法是在文件后面追加一条命令: -Dfile.encoding=UTF-8
一定注意,不要有空格,否则重启IDEA时会打不开,然后 重启IDEA,把原来的png图片删掉,再重新生成,即可解决乱码问题
解决问题后,把xml文件重新改成bpmn格式,和png图片一起压缩成zip包进行部署。
- SpringBoot集成Activiti
3.1、添加activiti依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.0.0.Beta2</version>
</dependency>
3.2添加 SpringSecurity 安全框架整合配置
因为 Activiti7 与 SpringBoot 整合后,默认情况下,集成了 SpringSecurity 安全框架,这样我们就要去 准备 SpringSecurity 整合进来的相关用户权限配置信息。
可以查看一下整合 SpringBoot 的依赖包,发现同时也将 SpringSecurity 的依赖包也添加进项目中了,
如下:
3.3 添加 SecurityUtil 类
这个类可以从我们下载的 Activiti7 官方提供的 Example 中找到(https://github.com/Activiti/activiti-examples)。
为了能够快速实现 SpringSecurity 安全框架的配置,所添加的一个组件。
3.4 添加 DemoApplicationConfig 类
在 Activiti7 官方下载的 Example 中找到 DemoApplicationConfig 类,它的作用是为了实现 SpringSecurity 框架的用户权限的配置,这样我们就可以在系统中使用用户权限信息。本次项目中基 本是在文件中定义出来的用户信息,当然也可以是数据库中查询的用户权限信息。
3.5 使用 SpringBoot 整合 Junit 方式测试新特性
通过上面的类,我们可以实现 SpringBoot 与 Junit 整合测试 Activiti7 所需的各种 API,之后我们就可以实现各种测试了。
老版本的Activiti使用ProcessEngineConfiguration、ProcessEngine、Service接口来实现对流程定义的部署,但是与springboot集成的版本只有两个操作类ProcessRuntime、TaskRuntime,这两个来负责流程定义的部署和操作。
ProcessEngineConfiguration类:主要作用是加载activiti.cfg.xml配置文件;
ProcessEngine类:帮助我们快速得到各个Service接口,并且可以生成activiti的工作环境(25张表的生成);
Service接口(RepositoryService、RuntimeService、TaskService、HistoryService):可以快速实现对25张表的操作。
3.6查看流程定义信息
通过 ProcessRuntime 的方法,我们可以查看已经部署的流程定义信息。通过加入 Pageable.of()方法可以实现分页查询效果。
3.7启动流程实例
现在要启动流程实例,我们可以使用 ProcessRuntime 的 start()方法就可以实现流程实例的启动
3.8查询并完成任务
使用 TaskRuntime 接口的 tasks()方法实现任务的查询。
使用 TaskRuntime 接口的 claim()方法实现任务拾取。
使用 TaskRuntime 接口的 complete()方法实现任务的完成。