Activiti工作流

一、我不是韩立,我叫厉飞雨

  • 一、工作流的简单了解

    • 1、介绍:将一组任务组织起来以完成某个事件的过程 :定义了任务的触发顺序和触发条件,每个任务可以由一个或多个 软件系统 完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成。
      只要牵扯到了多个角色的多个任务都可以使用

    • 1-1目前常见的工作流程有两种方式:
      (1)通过状态字段实现流程控制。原始,适合简单流程控制。
      (2)工作流引擎实现流程控制。适用场景更广泛,扩展性更好。

    • 2、实现原理:
      不改变代码的前提下实现各种业务流程的管理,适用性,扩展性很优秀。
      activiti通过创建流程实例引擎,可以实现不同流程的流转,通过不断读取创建的流程节点实现流程流转。

    • 3、工作流引擎分类

      工作流引擎 功能 文档 环境部署
      Activiti 支持绝大部分工作流功能,符合中国国情的审批流程需要在此基础上进行开发。 文档丰富,csdn有相应专栏,并且国人贡献了一本《activiti实战》详细的讲解了基于activiti的开发内容,网上教程资源丰富。 官方提供webapp war包,部署在Tomcat下可快速操作和了解activiti,eclipse提供支持activiti项目的ide插件,总的来说环境支持良好。
      jBPM 支持绝大部分工作流程,符合中国国情的审批需继续二次开发。 中文文档相对匮乏,网上教程资源参考价值不大。
      jFlow 支持大部分流程的基础功能:前进、后退、转向、转发、撤销、抄送、挂起、草稿、委托代办,也支持高级功能取回审批、项目组、外部用户等 公司提供完整详细的接口文档和操作手册,属于国内公司开源项目,有专门的BBS论坛 官方提供快速运行体验http://demo.ccflow.org/,也可按照教程部署到本地Tomcat下访问本地http://127.0.0.1:8080/jflow-web/地址测试。
      • activiti
        Activiti是由jBPM 的创建Tom Baeyen离JBoss之后建立的项目,构建在开发 jBPM 版本1到4时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。
        Activity 相对简单,仅有流程引擎,没有表单引擎。在BPM的研究领域, 很多的学者,专家都是把流程引擎与表单引擎分开的
        流程定义是线下按照bpmn2.0标准去描述业务流程,通常使用activiti-explorer(web控制台)或activiti-eclipse-designer插件对业务流程进行建模,这两种方式都遵循bpmn2.0标准。
        优势
        从技术组成来看,Activiti最大的优势是采用了PVM(流程虚拟机),支持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能力,延续了jBPM3、jBPM4良好的社区支持,服务接口清晰,链式API更为优雅
        Activiti上手比较快,界面也比较简洁、直观
        Activiti 相对丰富的资料,并且高度与 SpringBoot 集成
        成熟、稳定、满足BPMN2.0规范
        用户众多,社区活跃,趋势良好
        易于上手,基于Spring、MyBatis常用互联网技术堆栈作为技术底层
        劣势
        持久化层没有遵循JPA规范
        Activiti 对表单的支持目前还是比较弱的,流程表单设计还是需要开发人员去处理
        Activiti的简单demo实验不难,但是若想结合实际业务灵活使用Activiti,需要花费不少时间。
      • flowable
        简介
        2016 年 10 月,Activiti 工作流引擎的主要开发者离开 Alfresco 公司并在 Activiti 分支基础上开启了 Flowable 开源项目,是Activiti的一个分支
        activiti5以及activiti6、flowable是Tijs Rademakers团队开发的。
        Activiti7是 Salaboy团队开发的。activiti6以及activiti5代码目前有 Salaboy团队进行维护。因为Tijs Rademakers团队去开发flowable框架了,所以activiti6以及activiti5代码已经交接给了 Salaboy团队(可以理解为离职之前工作交接)。目前的activiti5以及activiti6代码还是原Tijs Rademakers原有团队开发的。Salaboy团队目前在开发activiti7框架。对于activiti6以及activiti5的代码官方已经宣称暂停维护了。activiti7就是噱头 内核使用的还是activiti6。并没有为引擎注入更多的新特性,只是在activiti之外的上层封装了一些应用。activiti6的很多框架bug在flowable框架中已经修复的差不多了,可以实现零成本从activiti迁移到flowable
        也新增了很多功能,如flowable支持jms、rabbitmq、mongodb等方式处理历史数据
      • jBPM
        简介
        jBPM是公开源代码项目,jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBoss jBPM。
        优势
        jBPM最大的优势是采用了Apache Mina异步通信技术,采用JPA/JTA持久化方面的标准,以功能齐全的Guvnor作为流程仓库,有RedHat(http://jBoss.org被红帽收购)的专业化支持
        劣势
        对自身技术依赖过紧且目前仅支持BPMN2
        JBPM 网上集成的资料甚少,且新版本相对比较笨重。
        jBPM7主要与JBoss下的规则引擎集成较好
      • jFlow
        简介
        jFlow属于济南驰骋信息技术有限公司的开源项目,向社会100%开源。研发于2003年,到一直持续到现在,功能强大丰富,图形化的配置,功能性配置较高,在中国国情下成长起来的优秀的工作流引擎。在国内有一定的市场地位,是国内著名的老牌工作流引擎。
        前身ccFlow,.NET开源的工作流. jFlow是java版本
        优势
        jFlow是JFlow流程引擎+CCForm的表单引擎的有机结合,内容相对复杂,配置程度较高,实施周期短,上手快。
        劣势
  • Activiti引擎:

    • 1、介绍
      1、建模业务流程的标准规则,一个流程由一个活动或多个活动组成。
      事件Event:Start开始,end结束,IntermediateCatching中间
      活动Activity:User Task用户任务,Service Task服务任务,Sub Process子流程
      网关GateWay:InclusiveGateWay并行网关,ExclusiveGateWay排他网关,EventGateWay事件网关

    • 2、使用
      一般情况下都是通过创建BPMN进行业务流程建模,两种方式,idea插件或者eclipse插件,通过符号创建流程。
      Activiti插件叫actiBPM,官网对应的idea只更新到了2019.1.4版本(使用idea2019.1.4之前的版本下面步骤基本可以跳过),往后的idea版本都不可以使用,往后的版本可以使用Activiti BPMN visualize这个插件,相差不大

      安装完成后可以看见

      右键创建好的BPMN文件可以看到

      • 安装流程图设计器
        camunda-modeler
        基于 bpmn.io的面向 BPMN DMN和CMMN的集成建模解决方案,camunda-modeler是一款外部流程设计器,同普通安装软件一样安装完后双击.exe程序即可使用,也可以通过IDEA安装外部Tool使用。
        链接:https://pan.baidu.com/s/1b9ZQHwuRZZUU7N3UW-qmtQ
        提取码:juzi
        安装解压即可使用
        idea配置camunda-modeler

        右键滑到External Tools有显示设计器即可

      • 3、入门

        • 第一步:添加maven依赖

           <!-- 统一管理版本activiti 的相关包 mysql的驱动包 mybatis log4j 数据库链接池--><properties><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><activiti.version>7.0.0.Beta1</activiti.version></properties><dependencies><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activiti.version}</version></dependency><!-- bpmn 模型处理 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>${activiti.version}</version></dependency><!-- bpmn 转换 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>${activiti.version}</version></dependency><!-- bpmn json数据转换 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>${activiti.version}</version></dependency><!-- bpmn 布局 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>${activiti.version}</version></dependency><!-- activiti 云支持 --><dependency><groupId>org.activiti.cloud</groupId><artifactId>activiti-cloud-services-api</artifactId><version>${activiti.version}</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!-- 链接池 --><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency></dependencies>
          
        • 第二步:创建activiti的xml配置文件activiti.cfg.xml,放在配置文件目录下

              //配置文件内容<?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">//配置数据源dbcp连接池<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/数据库名"/><property name="username" value="用户名"/><property name="password" value="密码"/>//最大活跃数<property name="maxActive" value="3"/>//最大空闲数<property name="maxIdle" value="1"/></bean><!--在默认方式下 bean的id  固定为 processEngineConfiguration--><bean id="processEngineConfiguration"class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!--直接引用上面配置的链接池--><property name="dataSource" ref="dataSource"/><!--关于 processEngineConfiguration 中的 databaseSchemaUpdate 参数, 通过此参数设计 activiti数据表的处理策略,参数如下:false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。create-drop: 构建流程引擎时创建数据库表, 关闭流程引擎时删除这些表。drop-create:先删除表再创建表。create: 构建流程引擎时创建数据库表, 关闭流程引擎时不删除这些表。--><property name="databaseSchemaUpdate" value="true"/></bean>
          </beans>
          
        • 第三步:编写代码

          public class ActivitiInit {//默认方式@Testpublic void GenActivitiTables2() {//条件:1.activiti配置文件名称:activiti.cfg.xml   2.bean的id="processEngineConfiguration"ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();System.out.println( processEngine );}//利用配置文件创建@Testpublic void GenActivitiTables1(){// 1.创建ProcessEngineConfiguration对象。第一个参数:配置文件名称;第二个参数:processEngineConfiguration的bean的idProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource( "activiti.cfg.xml", "processEngineConfiguration" );// 2.创建ProcessEngine对象ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
          }//也可以通过纯代码生成不使用配置文件,手动连接数据源创建  @Testpublic void createProcessEngine1(){//创建ProcessEngineConfiguration对象ProcessEngineConfiguration engineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();//设置数据库连接属性engineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");engineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/数据库名?createDatabaseIfNotExist=true" +"&useUnicode=true&characterEncoding=utf8");engineConfiguration.setJdbcUsername("用户名");engineConfiguration.setJdbcPassword("密码");// 设置创建表的策略 (当没有表时,自动创建表)//      public static final java.lang.String DB_SCHEMA_UPDATE_FALSE = "false";//不会自动创建表,没有表,则抛异常//      public static final java.lang.String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";//先删除,再创建表//      public static final java.lang.String DB_SCHEMA_UPDATE_TRUE = "true";//假如没有表,则自动创建engineConfiguration.setDatabaseSchemaUpdate("true");//通过ProcessEngineConfiguration对象创建 ProcessEngine 对象ProcessEngine processEngine = engineConfiguration.buildProcessEngine();System.out.println("流程引擎创建成功");processEngine.close();}
          
        • 第四步:执行代码生成数据库
          activiti默认初始化25张表,执行第三步的代码后去数据库查看

          Activiti 的表都以 ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的 API 对应。
          ACT_RE_*: 'RE'表示 repository。这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
          ACT_RU_*: 'RU'表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
          ACT_HI_*: 'HI'表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
          ACT_GE_*: 'GE'表示 general。 通用数据, 用于不同场景下**具体的表说明网上都有这里就不写了
          **
          
        • 第五步:创建流程图

          创建BPMN文件后,右键

          可以看到

          创建图标后可以点击右上角的箭头拖动到其他组件中,点击组件下方会有具体的信息展示,给Name赋值就可以看到对应的信息

          创建后可通过Camunda Modeler打开文件,生成流程图可以通过Camunda Modeler直接生成,也可以在idea流程里面点击save to PNG(上面有)

          在每个阶段加上指定负责人

          这样一个基本的流程就完成了,每个阶段的负责人也指派了。下面进入代码阶段。

Activiti工作流+idea2021入门筑基上篇-修身相关推荐

  1. Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)

    文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...

  2. activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...

    点击上方"好好学java",选择"置顶"公众号 重磅资源.干货,第一时间送达 重磅推荐  ① 纯福利 | 公众号资源大汇总,一年才一次! ② 重磅!!2018年 ...

  3. Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)...

    文章源码托管:github.com/OUYANGSIHAI- 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activiti 框架,写写博客的,但是,事情总是纷纷杂杂,一直拖 ...

  4. Activiti工作流从入门到入土:工作流简介

    文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 一.activiti介绍 Activiti5是由Alfresc ...

  5. activiti工作流引擎入门教程

    activiti简介 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准. Activiti是一种轻量级,可嵌入的BPM引擎,而且 ...

  6. 【青铜打铁篇】Activiti 工作流从入门到入土?

    点击上方"好好学java",选择"置顶"公众号 重磅资源.干货,第一时间送达 重磅推荐 ① 纯福利 | 公众号资源大汇总,一年才一次! ② 重磅!!2018年J ...

  7. Activiti工作流从入门到入土:入门实例

    一.前言 在上一节中我们对activiti进行了基本的介绍activiti进行了基本的介绍,同时介绍了基本的概念. 这一节,我将用一个入门程序,介绍如何使用activiti. 二.环境准备 2.1.编 ...

  8. Activiti工作流从入门到入土:整合spring

    文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 一.前言 在上一节中,通过一个入门程序,把activiti的环 ...

  9. 一、activiti工作流(workflow)入门介绍

    activiti官方网站(官网通常很卡,不建议看,直接看我教程就行) http://www.activiti.org/ eclipse离线安装activiti插件并下载教程 https://downl ...

最新文章

  1. 排列(permutation)2_6
  2. 2016年,新的开始
  3. Knative 基本功能深入剖析:Knative Serving 之服务路由管理
  4. DeepEarth更新到Silverlight 4了
  5. 图片高亮处理编程_GMT语法高亮-智能提示-代码补全插件
  6. python在线问卷调查系统源代码_基于Python 练习1情况的在线问卷
  7. 被女孩子冷落了,最适合看的20句话
  8. Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题
  9. 交叉编译Python-2.7.13到ARM(aarch32)平台
  10. [Flex] ButtonBar系列——labelFunction用户提供的函数,在每个项目上运行以确定其标签...
  11. c语言谢延红主编答案,C语言程序设计课程改革与实践.doc
  12. [转] caffe数据层参数说明
  13. qq自定义diy名片代码复制_免root安卓版QQ自定义在线 卡iPhone 12 Pro Max,卡5G,6G在线等状态...
  14. JS编写华氏度转摄氏度
  15. Cadence Allegro PCB 17.4的叠层、正片和负片的设计
  16. 单片机学习——看门狗
  17. 解决QQ 群共享无法打开,页面无法显示
  18. DIY电脑检测软件大集中
  19. js时间戳转时间(年-月-日 时:分:秒)
  20. 记录导出微信聊天记录到硬盘的过程

热门文章

  1. 武汉计算机考试科目,武汉计算机应用能力考试调整部分科目的通知
  2. 应用支持向量机对婴儿EEG数据进行多元模式分析
  3. SMS基本概念和移动通信系统介绍
  4. angular文件上传php,ajax jquery angular 上传文件与分隔上传
  5. 亲身试验熟桐油涂装家具,最后更新,出结论
  6. phpstrom设置注释
  7. 希尔排序 最坏时间_希尔排序算法
  8. 14个开源免费的人工智能项目,人脸识别依旧很受欢迎
  9. 步进电机失步(丢步)的原因和对策
  10. 利用逆矩阵解线性方程组_资料 | 矩阵论简明教程