Activiti6.0学习实践(1)-基础和部署

2023-11-01

      工作流是现在信息化建设过程中经常用于解决业务流程管理问题的工具,因此工作流是一个比较专业化的话题。当前流行的工作流主要有JBPM和activiti。本系列学习实践的目的就是掌握activiti的部署、开发和应用。

---重要说明:本系列学习实践都是基于慕课视频学习的自己记录


目录

1、工作流

2、工作流引擎选型

3、工作流引擎部署

3.1 准备工作

3.2 部署

3.4 启动

4、建立一个简单的工作流示例

4.1目标

4.2设计流程参与者

4.3 设计流程

4.4 创建流程应用

4.5 流程应用的实操

5、问题总结

5.1 更换为mysql数据库启动异常

5.2 创建用户无法登陆

5.3  中文乱码问题


1、工作流

       什么是工作流呢?采集百度百科的说法:工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。工作流主要解决的主要问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

从上面我们关注几个重点:

  1. 业务规则的抽象
  2. 协同工作
  3. 自动传递文档、信息或者任务

上面几个方面的重点内容我想已经很清晰的描述工作流的本质了

2、工作流引擎选型

当前工作流主要有 jbpm和 activiti。

下图是二者之间的主要区别:

再用搜索引擎的搜索指数看一下,发现activiti明细比jbpm高:

这也是对工作流进行学习首选activiti的原因。

3、工作流引擎部署

下面我们正式进入到activiti工作流学习的环节。

3.1 准备工作

我们可以通过工作流引擎activiti的部署来初步了解一下activiti。这个软件的下载地址为:https://www.activiti.org/。要将这个工作流引擎用起来,我们需要准备如下环境:

  1. 服务器:
  2. Java环境: jdk1.8
  3. Servlet容器:tomcat 8.0
  4. 软件:Activiti6.0 压缩包

上面的内容也比较常见,这里说一下最后一个activiti压缩包如何获取。在官网点击“try now”后,找到如下页面

最新的是Activiti7.0, 因此我们需要从Older Versions找到Activiti6.0。点击淡绿色的 6.x Download,进行下载,下载链接https://github.com/Activiti/Activiti/releases/download/activiti-6.0.0/activiti-6.0.0.zip,你也可以直接下载,下载完成后是一个压缩文件。

解压这个文件后,可以看到如下的文件目录

进入wars目录,这里就是我们需要部署的内容了

admin包是管理相关,app是应用, rest是接口。

如果你的系统是linux的,可以将这些war部署到linux下的tomcat,本文档以windwos为环境,所以后续没有特别说明,都是在window环境下配置和操作。

此外,activiti-app也有汉化版,可以通过下面链接获取:

链接:https://pan.baidu.com/s/1Wj6U4xVJ5vrmQVI2o-Z5_Q

提取码:7779

主要是提供给网络不方便的小伙伴自取。

3.2 部署

将上面的三个war包,拷贝到tomcat下的webapps目录下

拷贝三个war包到上面的目录中这样就完成了部署工作。

      1. 数据库修改

由于activiti默认集成了嵌入式数据库h2,这个内存库,重启后会丢失内容,所有我采用的是mysql数据库,因此需要将数据库修改为mysql配置。

将上面红框中内容,按自己的mysql配置进行修改,保存。启动后,工程会检查activiti对应的库表是否存在,如果不存在会创建相应的数据库表对象。

3.4 启动

下面我们要进行activiti应用的启动,进入到apache-tomcat-8.5.34 -activiti\bin目录,双击脚本startup.bat

这样就表示应用启动好了。我们通过下面的url来检验一下:http://localhost:8080/activiti-app

在浏览器中输入上面url,呈现如下的界面

输入账号和密码: admin/test 点击signin,能看到下面页面,就说明部署成功了。

这个页面是activiti的面板,看到这个说明activiti部署成功。

由于都是英文界面,所以可以去下载一个汉化包(前面提供过百度盘),替换app包的内容。下面是替换汉化包后的activiti-app启动后内容界面:

 

4、建立一个简单的工作流示例

4.1目标

设计一个简单的二级审批流程:

开始-》员工填写请假单-》部门领导审批-》人力审批-》结束

这个简单的流程里面,体现了二级审批,即部门领导审批,人力审批

4.2设计流程参与者

上面这个流程有几个参与者:员工,就是流程的发起人 user_dev; 部门领导: user_tl;人力审批: hr_tl;

我们打开activiti的操作界面:

选择用户面板:

然后,点击创建用户,创建下面几个用户:

user_dev, user_tl,hr_tl

创建好后如下所示:

说明:电子邮件项目是必填项,如果不设置,会导致无法用新创建的用户登录系统。

点击页面上的 可以返回到主界面。

4.3 设计流程

    在完成了上面参与者的创建后,我们开始进行二级审批流程的设计。设计之前,我们需要明白这里的流程设计其实是流程模板设计。比如说,我们要建立一个二级审批流程模板,这个模板适用于多个二级审批应用,比如请假申请、出差申请、调休申请等等,这些日常公司中常用的流程都是二级审批,所以都可以在一个通用的二级审批模板上来建立各种应用。当然有人会说不同的申请,填写的内容(我们一般称为表单)不同,这个后面再说。

然后,我们选择创建流程


在创建流程的界面上,我们先为流程起一个名字:二级审批流程。

点击创建新模型后,在展开的页面就可以进行流程的设计。尤其关注下图中标注红色的部分是经常要创建的活动/任务。

通过拖拉左边的组件,我们创建开始、两个用户活动、结束这些组件,并把他们连接起来(点击某个组件,可以在弹出的操作内容中选择箭头连接这些组件)。然后我们选择用户活动,将用户活动的指派人进行设置。

然后,我们进行任务派遣,这个活动是部门领导对员工的请假单进行审批,所以我们可以这样选:

下面对第二个用户活动进行任务派遣,通过这派遣将流程和用户关联起来。

上面的任务分配给单个用户,或者候选用户都只是选择的方式,完成后我们可以在流程面板看到发布的这个流程。

4.4 创建流程应用

流程创建好了后,可以进行流程应用的开发。上面的流程可以理解为流程模板,而应用是流程模板一个具体的应用。比如上面的二级审批流程,可以用于请假流程应用,也可以用于出差流程应用等等。

创建后,我们还需要为这个应用选择流程模型,从应用面板上,看到我们创建的请假模块应用,点击红框进行应用和流程的设定。

点击上图中的按钮后,对应用的基本内容进行操作:

在编辑模型部分,选中适合的流程模型后,出现下图中的+号

关闭后,看到流程应用和流程模型关联起来了。

注意,这个时候要点击保存,把下面图中的小勾打上,进行流程应用的发布,这样就可以进行实际的应用了。

4.5 流程应用的实操

我们进入到系统主界面,可以看到流程应用-请假模块已经发布了:

下面我们进行流程的实际操作验证,通过以下几个步骤来熟悉activiti的流程执行过程:

  1. 用user_dev登陆,进行请假
  2. 用user_tl登陆,审批流程
  3. 用hr_tl登陆,二级审批
  4. 用户查看到自己流程的状态

第一步:用user_dev用户登录

我们看到这里已经有一个请假模块,如果看不到请检查上一步应用创建并保存时是否勾选了发布。下面我们要发起一个活动(具体的一个流程实例)

注意:不是选中第一个,第一个是创建一个临时协作任务。第二个新的进程并跟踪进程才是根据流程进行工作流协作。

点击开始一个新进程后,在界面上选中二级审批流程,本例中只有一个流程,所以默认选中,在右边的“开始流程”按钮上点击:

点击开始后,流程引擎启动了,我们可以看到这个流程进程已经启动:

红框中内容表示对应的流程已经启动,并派发到部门领导处进行审批。红色箭头指向的按钮,点开后展示流程进行过程:

注意上图中颜色代表的意义:蓝色表示完成的活动,绿色表示当前处于的活动,灰色表示还没有开始的活动。

第二步:user_tl登陆

根据我们的设计的规则,这个用户登录后,会在请假模块看到一条自己需要处理的待办,我们来看看是否如此:

我们可以进行审批(这是添加一个注释),然后点击完成。完成后,在任务列表中已经看不到要处理的任务,在进程中看到这个活动的流程:

而此时显示图表表示流程进入到hr审批阶段。

第三步:hr_tl登陆

Hr登陆后,在任务列表中看到待办任务列表中有一条记录,可以进行审批。

而用user_dev账号登陆,可以看到活动的流程目前流转到hr审批

当hr审批完成后,同样任务列表中消失,由于这个审批任务完成了,所以在进程中是看不到这个流程的,同理用user_dev,user_tl登陆一样看不到这个完成的流程了。

第4步:通过activiti-admin查看完成的流程

Activiti-admin是工作流的管理功能模块,通过下面的url进入。首先打开http://localhost:8080/activiti-admin,使用账号 admin/admin登陆

这里显示activiti-app的端口是9999,需要修改为正确的端口,通过右边的edit按钮进行修改。修改完成后,我们可以在deployments面板下看到我们发布部署的应用:请假模块

在tasks面板下,我们可以看到流程最后结束的两个操作

可以通过instances(实例)面板,来查看每个流程实例:

红色箭头指向的是最后一个发起的请假流程。7528是这个流程实例ID,点击这条记录,可以看到这个流程下的各个任务(即参与协同的人完成的每个活动)。

从上面可以看到这个流程实例进行的具体的2个活动

5、问题总结

5.1 更换为mysql数据库启动异常

问题:采用mysql数据库,启动应用,报告liquibase下创建对象exist存在,app或者admin应用启动异常

解决:由于默认采用H2数据库(一种内存数据库),系统重启后会丢失,因此修改为mysql可以保持数据持久化。注意admin和app两个应用数据库要建成不同库,否则会因为数据同步方面的设计导致应用启动异常

5.2 创建用户无法登陆

问题:创建用户后,用新用户无法登陆

解决:用admin账号创建用户时信息要完整,比如要有email信息,创建时不填写是不会报异常的,因此创建了用户,无法用这些用户登录一般都是创建时信息不完整。

5.3  中文乱码问题

问题:Admin应用显示中文乱码

解决:在tomcat容器中可以进行中文配置:修改catlina.bat文件

加入  UTF-8参数设置

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Activiti6.0学习实践(1)-基础和部署 的相关文章

  • activiti报错:org.activiti.engine.ActivitiTaskAlreadyClaimedException: Task ‘12502‘ is already claimed

    在运行activiti时 报错信息如下 Exception in thread main org activiti engine ActivitiTaskAlreadyClaimedException Task 12502 is alrea
  • JavaEE项目实战(OA系统)之十八_流程审批之一

    JavaEE项目实战 OA系统 之十八 流程审批之一 下面介绍OA系统的另一模块 流程审批 OA系统推崇的是无纸化办公 因此各项事务的流程审批是OA系统的一大类应用 下面 我们来设计流程审批的数据库 首先 我们来看一张图 所谓的 流程审批
  • Activiti7 监听器【十四】

    Activiti 7系列文章目录 文章代码下载 Activiti7 工作流设计器 一 Activiti7 创建表 二 Activiti7 表结构介绍 三 Activiti7 设计器创建流程 四 Activiti7 部署流程 五 Activi
  • Activiti和tk.mybatis的坑

    近期开发关于工作流的项目 遇到一个很坑的问题 activiti和tk mybatis居然会有冲突 先看异常 报错的原因大概就算这句话 Parameter 1 of method springProcessEngineConfiguratio
  • 【activiti】网关

    activiti网关 网关是用来控制流程的走向的 1 排他网关 ExclusiveGateway 1 1 什么是排他网关 排他网关 用来在流程中实现决策 当执行到这个网关时 会根据判断条件去选择执行某一条分支 注意 排他网关只会选择一个为t
  • 工作流Activiti7整合SpringBoot使用

    前言 一个软件系统中具有工作流的功能 我们把它称为工作流系统 一个系统中工作流的功能是什么 就是对系统的业务流程进行自动化管理 所以工作流是建立在业务流程的基础上 所以一个软件的系统核心根本上还是系统的业务流程 工作流只是协助进行业务流程管
  • Activiti源码分析

    Activiti是业界很流行的java工作流引擎 关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题 相关内容可以baidu一下 Activiti从架构角度看是比较优秀的 是很面向对象的 是我所阅读过的代码结构很棒的开源软
  • Flowable 用户问题

    Flowable用户和系统用户问题 springboot集成flowable modeler 实现免登 权限管理 Flowable引擎使用统一权限管理
  • activiti学习--06流程变量:流程变量+变量的类型+流程变量api+设置流程变量1或2+查询流程变量的历史表

    流程变量 1流程变量的作用域范围是只对应一个流程实例 所以只要设置就行了 不用管在哪个阶段设置 2各个流程实例的流程变量是不相互影响的 3流程实例结束完成以后流程变量还保存在数据库中 存放到流程变量的历史表中 4基本类型设置流程变量 在ta
  • activiti学习(五)——执行监听器与任务监听器的基本使用

    本文介绍执行监听器与任务监听器的基本原理和使用方法 当流程途径连线或者节点的时候 会触发对应的事件类型 执行监听器与任务监听器在生产中经常会用在几个方面 动态分配节点处理人 通过前一个节点设置的变量 在运行到下一个节点时设置对应的处理人 当
  • 关于工作流应用的思考

    我今天在学习的过程中突然思考了一个问题 即工作流在多数企业中用不起来主要有两个原因 1 信息化程度不够 2 工作流不够灵活 下面我以大学业务管理为例 对以上两个原因进行说明 由于各个学院各个单位的系统相互独立 所以学院内部的工作通常由内部系
  • Activiti7源码分析

    文章目录 Activiti7源码分析 整体架构 命令模式 责任链模式 事务拦截器 命令上下文拦截器 流程定义解析 Activiti之PVM执行树 核心理念 PVM对流程定义期的描述 PVM对流程运行期的描述 PVM综述 ActivitiIm
  • activiti5.17.0流程图及节点显示

    引用 activiti流程图上获取各节点的信息获取 这篇文章写得很好 揭示了图片点击出现信息的方法 于是我也做了 只不过有些改动 可能是activiti的版本不同的原因 jsp页面 通过流程实例id进行操作
  • 《5分钟说完一个概念》:什么是Bootstrap采用

    想知道中国人的平均身高 群体均值 群体方差为 每次抽样 1000 人 抽样了 次 每次抽样的 1000人 的平均身高是一次随机抽样 这
  • 2023最新版本Activiti7系列-身份服务

    身份服务 在流程定义中在任务结点的 assignee 固定设置任务负责人 在流程定义时将参与者固定设置在 bpmn 文件中 如果临时任务负责人变更则需要修改流程定义 系统可扩展性差 针对这种情况可以给任务设置多个候选人或者候选人组 可以从候
  • Springboot集成activiti的配置文件ActivitiConfig

    Configuration public class ActivitiConfig Bean public ProcessEngineConfiguration processEngineConfiguration DataSource d
  • Activiti-设置全局变量的四种方法

    1 在流程启动的时候设置全局变量 在流程启动时设置全局变量 Test public void startProcessInstance 得到runtimeService RuntimeService runtimeService proce
  • 「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(一)

    DHTMLX Gantt 是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表 可满足项目管理应用程序的所有需求 是最完善的甘特图图表库 在web项目中使用DHTMLX Gantt时 开发人员经常需要满足与UI外观相关的各种需求 因此他
  • 动态设置用户任务受让人

    我必须在 activiti 中创建需要以下用例的流程 1 表单有一个人员搜索字段 2 当有人填写表单并使用填充姓名的人员搜索字段完成任务时 我需要将分配的下一个任务的名称设置为可以对下一个任务执行操作的用户 如何使用 activiti 引擎
  • 如何获取控制器中流程实例的ID?

    我的环境 Alfresco Share v5 2 d r134641 b15 Aikau 1 0 101 3 Spring Surf 5 2 d Spring WebScripts 6 13 Freemarker 2 3 20 alfres

随机推荐

  • boost::lockfree::queue多线程读写实例

    最近的任务是写一个多线程的东西 就得接触多线程队列了 我反正是没学过分布式的 代码全凭感觉写出来的 不过运气好 代码能够work 话不多说 直接给代码吧 一个多消费者 多生产者的模式 假设我的任务是求队列的中位数是啥 每消费10000次的时
  • Real-time Neural Radiance Talking Portrait Synthesis via Audio-spatial Decomposition学习笔记

    Real time Neural Radiance Talking Portrait Synthesis via Audio spatial Decomposition NeRF Neural Radiance Field 即神经辐射场 要
  • Java语言的重载和重写的区别

    学习java语言中重载和重写的区别 重载 Overload 重载 overloading 是在一个类里面 方法名字相同 而参数不同 返回类型可以相同也可以不同 每个重载的方法 或者构造函数 都必须有一个独一无二的参数类型列表 最常用的地方就
  • flutter charts_flutter图表使用

    https github com google charts 效果 线性图 Copyright 2018 the Charts project authors Please see the AUTHORS file for details
  • 一张图,看懂区块“链”

    可能很多人都觉得区块链是一个多么新颖的技术 其实不然 它不过是旧瓶装新酒 本身并没有创造新的技术 只是将几种已经成熟的技术进行组合 是融合性创新 而作为刚开始接触区块链 脑海没有一个具体概念 到底什么是区块链 区块链技术 落地 这是辽宁沈阳
  • Blog_system之ssm项目

    简述一下就是把之前的servlet项目改成了ssm项目 功能啥的都是一致的 详细可以去我的码云观看zqy zhang qinyang1 Gitee com
  • js 的 slice 和 splice

    js 的 slice 和 splice 都是数组的方法 slice 不改变原数组 splice 改变原数组 let arr 1 2 3 4 5 slice start number end number T start 和 end 表示索引
  • Java 类Servletrequest_java中servlet中有关HttpServletRequest的不理解

    首先你得知道servlet的工作原理 可以百度一下 如何写呢 首先需要新建一个web项目 然后新建一个servlet 注意一下mapping url就是访问的url也就是http 127 0 0 1 8080 项目名 你的mapping u
  • Android 11 Pixel 3XL Root教程

    Pixel 3 XL 安卓11正式版ROOT 所谓人生重在折腾 我又把安卓升级了 首先是升级至安卓11 无论是刷固件升级 还是用自带的 都会把Root刷掉 在升级完成后就可以开始折腾了 众所周知 twrp肯定不支持 只能用magisk来ro
  • jQuery on(绑定事件)前别忘了off(移除事件)

    废话不多说直接上代码 用到的自己运行看效果
  • 【转】对于编译程序时出现“Deprecated declaration ultrasonic_Init - give arg types”的解决办法...

    编译程序时出现 Deprecated declaration ultrasonic Init give arg types 中文释义 给定函数的参数的类型过时 解决办法 在函数void ultrasonic Init 声明和定义的时候定义参
  • <<视觉Transformer>>2021:Bottleneck Transformers for Visual Recognition

    本专栏只研究vision Transformer的原理 对实验不做过多研究 目录 摘要 一 介绍 二 相关工作 三 方法 四 实验 五 结论 摘要 我们提出了BoTNet 这是一个概念简单但功能强大的主干架构 它将自注意结合到多个计算机视觉
  • webpack文档(一)

    安装webpack npm webpack webpack cli g webpack cli是命令行工具 安装以后可以在命令行执行webpack的相关命令 g直接在全局安装的话后续可以在任意目录下使用webpack 全局安装仅适用于学习使
  • FLP不可能性(FLP impossibility)

    FLP不可能性 FLP impossibility FLP impossibility是一个定理 它证明了在分布式情景下 无论任何算法 即使是只有一个进程挂掉 对于其他非失败进程 都存在着无法达成一致的可能 FLP是Fischer Lync
  • android中的后退键——onBackPressed()的使用

    多网友不明白如何在Android平台上捕获Back键的事件 Back键是手机上的后退键 一般的软件不捕获相关信息可能导致你的程序被切换到后台 而回到桌面的尴尬情况 在Android上有两种方法来获取该按钮的事件 1 直接获取按钮按下事件 此
  • thrift.transport.TTransport.TTransportException: TSocket read 0 bytes报错解决

    一 问题描述 htrift版本 2 0 0 cdh6 0 1 hbase版本 1 2 0 cdh5 7 0 使用 thrift client with python 连接 hbase 报错 File C Users HP env1 lib
  • 求职宝典:职场新人赶紧卸掉“假成熟”

    你看得出我几岁吗 你没看错 这句话不是护肤品广告 而是众多职场中人的心声 职场中有个有趣现象 年长的羡慕年轻人的朝气与活力 不乏扮嫩一族 而新人们则竭力扮老 想使自己显得更成熟稳重些 在职场中更有分量 但 成熟 过度不一定是好事 入职太成熟
  • 强化学习之GYM库

    GYM库 gym基础 GYM库版本 0 18 0 导入gym环境 env gym make CartPole v0 查看Gym库注册的环境 from gym import envs env specs env registry all 所有
  • 信号通过相关器 Matlab,第五章 基带数字信号传输.ppt

    Matlab应用与通信仿真 第五章基带数字传输 什么是基带数字传输基带数字传输系统的构成 二进制信号传输 AWGN Additivewhitegaussiannoise 最佳接收机 Matlab应用与通信仿真 数字基带信号 数字PAM信号
  • Activiti6.0学习实践(1)-基础和部署

    工作流是现在信息化建设过程中经常用于解决业务流程管理问题的工具 因此工作流是一个比较专业化的话题 当前流行的工作流主要有JBPM和activiti 本系列学习实践的目的就是掌握activiti的部署 开发和应用 重要说明 本系列学习实践都是