activiti工作流入门学习
工作流一般在OA系统用的比较多,当然,只要有流程审批的地方都会用到,activiti只是开源的工作流中比较流行的一个,还有其他的开源的工作流,这里学习activiti工作流;前面部分是关于activiti的总体的介绍及如何搭建,后半部分使用一个demo演示,清晰直观的观察工作流的工作机制及数据库表的数据变化,对工作流的理解和使用有一个直观的认识。
一.总体认识
1.介绍
Activiti是一个开源的工作流框架,用的最多的例子就是审批流程,比如员工请假,申请之后提交,然后会提交到经理,经理审批完可能还会部长审批,等一系列流程;还有比如报销申请,需要先由经理审批,然后由总监审批,最后还要财务审批等,经过一系列事先制定好的流程;当然了,这只是工作流的一个应用,实际工作流还有其他的很多应用;activiti使用起来也比较方便,自动生成25张数据库表,有8大核心API,通过这些核心API就可以很方便的使用工作流。
2.部署方式
很多将工作流的博客都比较老,而且都只从自己的一个部署方式去讲解,不同的博客可能使用不同的部署方式,让初学者感到很懵,不知道到底应该用哪个,其实部署流程资源有很多种方法,包括classpath、InputStream、字符串、zip格式压缩包,不同的部署方式可以根据项目或者自己实现的难易程度进行自由选择;
因为支持直接加载.bpmn格式的文件,比较方便,而actiBPMN插件也正好可以很方便的生成.bpmn格式的文件,很方便的画流程图,所以这就是前面要先安装actiBPMN插件原因,画出流程图之后,然后部署就行了,所以我使用直接加载.bpmn文件的方式部署,希望初学者不要在这里疑惑。
3.使用
使用步骤:部署流程==>发起一个流程实例(流程开始)==>使用流程(查询流程、查询代办、提交审批、结束流程….等等)
每次修改完流程图之后,都要重新部署流程;每开始一个(审批流程)新的流程实质就是发起一个流程实例;发起流程之后,整个流程就开始了。
4.数据库表说明
数据库表比较多,这里就不都列举了,详情可以网上搜索,有很详细的说明;
需要主要关注的几张表:
部署流程阶段:ACT_RE_DEPLOYMENT、ACT_RE_PROCDEF
发起流程阶段:ACT_RU_EXECUTION、ACT_RU_TASK、ACT_RU_VARIABLE
一个流程实例的发起,在ACT_RU_EXECUTION中才存在,流程实例执行完毕,则该表的该实例信息就会被自动删除;
一个流程实例的发起,在ACT_RU_TASK才会有该流程实例的审批相关任务,该表只对应一个流程实例执行到的当前节点的审批信息,包括审批人和任务id等任务信息,可以根据审批人查询其代办任务,执行完之后便删除,然后显示下一审批节点的任务信息,即只显示当前节点的任务信息,这个流程实例执行完毕,则表为空;
一个流程实例的发起,到达一个节点,如果该节点有判断条件(在流程线上的判断条件),则判断条件中的变量会被存储到ACT_RU_VARIABLE,如果流程实例执行完毕,则该表为空。
5.API说明
RepositoryService 流程仓库Service,可以管理流程仓库例如部署删除读取流程资源
RuntimeService 运行时Service可以处理所有运行状态的流程实例流程控制(开始,暂停,挂起等)
TaskService 任务Service用于管理、查询任务,例如签收、办理、指派等
IdentitiServicec 身份Service可以管理查询用户、组之间的关系
FormService 表单Service用于读取和流程、任务相关的表单数据
HistoryService 历史Service用于查询所有的历史数据
ManagementService 引擎管理Service,和具体业务无关,主要查询引擎配置,数据库作业
DynamicBpmService 动态bpm服务
需要重点关注的三个主要API:
RepositoryService:流程仓储的管理,可以读取流程资源、部署、查询已部署的流程、删除等;(类似java的类)。
RuntimeService:流程实例的发起及流程实例的管理等;(类似java的类的实例)。
TaskService:流程实例中的任务管理,例如代办任务查询、办理、指派等;(类似java类的实例的方法和参数值)。
二.开发前准备
我的开发环境:
Idea(2019.3.3),springboot(2.2.7),activiti7,mybatis(2.1.2), druid(1.1.10);
idea的actiBPMN插件安装
1.下载插件
插件官网:https://plugins.jetbrains.com/plugin/7429-actibpm/versions

下载完成之后,不用解压,建议放到idea安装目录的plugins下:

2.然后从本地安装插件,选择刚才那个插件包,安装完毕之后要重启idea才生效:

安装完成重启之后,选择新建,则可以看见bpmnfile,则说明成功了:

插件安装完成了,接下来就可以搭建demo了;
三.demo演示
项目地址:https://github.com/Little-Orange7/activiti-demo
1.搭建一个springboot项目

这是搭建springboot的步骤,后面的比较简单,就省略了。
来看下项目的依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
application.propertities配置:
#server
server.port=8088
server.compression.enabled=true
#datasource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/cmms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
#activiti7默认是不自动生成8张历史记录表的,这里设置开启
#spring.activiti.db-history-used=true
#spring.activiti.history-level=audit
遇到的问题:
1.启动报错,原因是启动时没有自动创建activiti表,所以没有查询到相关表;
解决:在数据库连接池的url上加上:nullCatalogMeansCurrent=true

2.项目启动只创建了17张表,没有创建25张表,原因是activiti7默认是不创建历史记录
表的(对整个工作流的执行没有影响,只是不会生成历史记录);
解决:如果要生成历史记录表,要主动打开,在配置中加入
spring.activiti.db-history-used=true
spring.activiti.history-level=audit

3.activiti7默认整合了spring security,所以如果直接在浏览器中访问,是需要先登录的;
解决:为了只测试activiti,这里可以先把spring security屏蔽掉,在启动类加上这个:
@SpringBootApplication(exclude = {//activiti7集成了springSecurity,此处暂时屏蔽掉
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
})
这时候启动,不报错,查看数据库,可以看见已经生成了25张表,说明启动成功。
然后创建相应模块:

项目地址:https://github.com/Little-Orange7/activiti-demo
2.然后使用actiBPMN插件在resource目录下新建bpmn文件:

用拖拽方式创建一个流程图:

编辑流程图节点信息,assignee随意指定一个即可,流程启动后,可以按照这个assignee来查询该user的代办任务;

加入判断条件及判断变量:

3.主要API的使用
环境准备及框架搭建已经完成,接下来就可以调用API来使用工作流;
部署流程:

查询已部署的全部流程:

发起一个流程:

查询代办任务(根据用户名):

提交任务(根据任务id):

4.模拟测试:
下面将使用[我项目的demo](https://github.com/Little-Orange7/activiti-demo)来演示工作流如何使用及对应流程数据表的数据变化;
先模拟节点一审批同意,节点二审批拒绝,观察数据库的数据变化;然后在模拟节点一审批同意,节点二审批同意,整个流程结束,观察数据库数据变化;
4.1部署流程

对应数据库表:

4.2发起流程

对应数据库表:

4.3根据用户查询代办任务

对应数据库表:


可以观察到流程在第一个审批节点。
4.4提交任务(第一个节点)
审批同意(message=Y)

提交任务之后,流程到了第二个审批节点


对应的判断条件的变量及值:

4.5提交任务(第二个节点)
审批拒绝(message=N)

流程又回到节点一了


变量的值变为N

4.6提交任务(节点一审批同意)

此时流程到了节点二



4.7提交任务(节点二审批同意)

到此,此流程实例已经结束了;
任务表已经没有任务了:

流程实例执行表也没有实例了:

变量表也没有变量了:

以上流程执行完成,根据流程和数据的跟踪,能很清晰的观察到流程的执行过程,当然这里只是一个简单的流程演示,还有很多流程流转方式需要去学习,待以后更新,希望这篇博客能帮助你学习activiti,如果有疑问的地方大家留言指出来一起学习探讨。
activiti工作流入门学习的更多相关文章
- 工作流Activiti新手入门学习路线整理
写在前面: 最近项目中使用到了工作流,虽然此部分不是自己需要完成的,但是也涉及到了要调用写的接口.正好有时间,就了解下,以便之后能在其他项目中用到时,不至于什么都不知道什么都不了解. 这里就主要整理下 ...
- Activiti工作流框架学习(一)之通用数据表详细介绍
文/朱季谦 Activiti工作流引擎自带了一套数据库表,这里面有一个需要注意的地方: 低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期.更糟糕的是,某些版本在尝试创建此类列时将引发异常,而其 ...
- Activiti 工作流入门指南
概览 如我们的介绍部分所述,Activiti目前分为两大类: Activiti Core Activiti Cloud 如果你想上手Activiti的核心是否遵循了新的运行时API的入门指南:Acti ...
- Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0
以前在工作当中做过不少与工作流Activiti有关的工作,当时都是spring集成activiti5.22的项目,现在回过头去看,其实版本已经稍微老了,因此,基于先前的工作经验,决定用较新版本的技术来 ...
- Activiti工作流入门
Activiti简介 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度. Activiti 作为一个遵从 Apache 许可的工 ...
- Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal error war ...
- Activiti工作流框架学习(一)——环境的搭建和数据表的了解
一.什么是工作流 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现 ...
- activiti工作流引擎学习(三)
5.接收任务活动(receiveTask,即等待活动)不是一个任务节点 接收任务是一个简单任务,他会等待回应消息的到达,当前,官方只实现了这个任务的java语义,当流程达到接受任务,流程状态会保存到数 ...
- Activiti工作流引擎学习(一)
1.部署对象和流程定义相关表:RepositoryService act_re_deployment: 部署对象表:一次部署的多个文件的信息,对于不需要的流程可以删除和修改 act_re_procde ...
随机推荐
- 详解 方法的覆盖 —— toString() 与 equals()的覆盖
在学习本篇博文前,建议先学习完本人的博文--<详解 继承(上)-- 工具的抽象与分层> 在本人之前的博文中曾讲过"基类"的知识,那么,本篇博文中的主题--Object类 ...
- es技术规划
一.业务背景 es服务当前没有专门的部门负责维护和开发,交由各端自行负责维护,随着公司业务查询和统计需求非常多,会面临居多方面问题和挑战: 无人(专业RD或部门)负责 无专业的人进行维护,遇到问题几乎 ...
- Java IO 流 -- 转换流: InputStreamReader OutputStreamWriter
java 中 转换流是以字符流的形式操作字节流,需要注意一下两点: 1.操作内容必须是纯文本 2.指定字符集避免乱码 操作控制台输入输出: try (BufferedReader br = new B ...
- 国外程序员整理的 PHP 资源大全
原文:http://blog.jobbole.com/82908/ ziadoz 在 Github 发起维护的一个 PHP 资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置工具 ...
- 数字签名---RSA算法
保证信息在传输过程中的安全性: 保密通信.密钥交换.数字签名. RSA算法 Diffie-Hellman算法 DSA算法 保密通信 √ × × 密钥交换 √ √ × 数字签 ...
- 算法笔记刷题1(codeup 1934)
准备6月份的拼题甲级中(本来现在这两天就考试了,但是因为疫情的原因延期了) 刚刚开始按算法笔记刷题,今天是探索codeup的第一天. 一开始并没有把多点测试当回事,直到一错再错,心态爆炸... 附上我 ...
- git .gitignore不生效
原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的. 解决方法: 1.先把规则写好,然后把规则对应的文件删了,然后 ...
- DDOS攻击攻击种类和原理
DoS攻击.DDoS攻击和DRDoS攻击相信大家已经早有耳闻了吧!DoS是Denial of Service的简写,就是拒绝服务,而DDoS就是Distributed Denial of Servic ...
- 【Django】runserver 0.0.0.0:0 后,究竟发生了什么
WSGI协议 Django是遵循WSGI协议设计的 WSGI协议主要包括server和application两个部分: WSGI server:负责从客户端接收请求,将request转发给applic ...
- 【linux三剑客】sed命令
sed - stream editor for filtering and transforming text sed 流编辑器 strem edition,实现对文件的增删改替换查是Linux中第二 ...