史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(3)

简介: 史上最全 Activiti 学习教程,一文搞定最强工作流引擎!

四、Activiti类关系图

上面我们完成了Activiti数据库表的生成,java代码中我们调用Activiti的工具类,下面来了解Activiti的类关系


4.1 类关系图

f72b86d03deaf337f4e053f9581b2205_35aaf57593cc4a7197cd93e63c7a258c.png


在新版本中,我们通过实验可以发现IdentityService,FormService两个Serivce都已经删除了。


所以后面我们对于这两个Service也不讲解了,但老版本中还是有这两个Service,同学们需要了解一下


4.2 activiti.cfg.xml

activiti的引擎配置文件,包括:ProcessEngineConfiguration的定义、数据源定义、事务管理器等,此文件其实就是一个spring配置文件。


4.3 流程引擎配置类

流程引擎的配置类(ProcessEngineConfiguration),通过ProcessEngineConfiguration可以创建工作流引擎ProceccEngine,常用的两种方法如下:


4.3.1 StandaloneProcessEngineConfiguration

使用StandaloneProcessEngineConfigurationActiviti可以单独运行,来创建ProcessEngine,Activiti会自己处理事务。


配置文件方式:


通常在activiti.cfg.xml配置文件中定义一个id为 processEngineConfiguration 的bean。


方法如下:


         class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

     

     

     

     

     

     

     

     

     

     

     

 


还可以加入连接池:


      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:context="http://www.springframework.org/schema/context"

      xmlns:tx="http://www.springframework.org/schema/tx"

      xsi:schemaLocation="http://www.springframework.org/schema/beans

                  http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/contex

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

 

     

     

     

     

     

     

 

 

 

         class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

     

     

     

     

 


4.3.2 SpringProcessEngineConfiguration

通过org.activiti.spring.SpringProcessEngineConfiguration 与Spring整合。


创建spring与activiti的整合配置文件:


activity-spring.cfg.xml(名称可修改)


  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:context="http://www.springframework.org/schema/context"

  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

    http://www.springframework.org/schema/mvc

    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd

    http://www.springframework.org/schema/context

     http://www.springframework.org/schema/context/spring-context-3.1.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd

    http://www.springframework.org/schema/tx

    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">

 

 

   

   

   

   

   

   

   

 

 

 

 

   

 

 

 

     factory-method="getRepositoryService" />

 

 

     factory-method="getRuntimeService" />

 

 

     factory-method="getTaskService" />

 

 

 

 

 

 

 

 

   

   

   

   

   

   

 

 

 

   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

   

 

 

 

   

       

       

       

       

       

       

       

   

 

 

 

   

 


创建processEngineConfiguration


ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")

上边的代码要求activiti.cfg.xml中必须有一个processEngineConfiguration的bean


也可以使用下边的方法,更改bean 的名字:


ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);

4.4 工作流引擎创建

工作流引擎(ProcessEngine),相当于一个门面接口,通过ProcessEngineConfiguration创建processEngine,通过ProcessEngine创建各个service接口。


4.4.1 默认创建方式

将activiti.cfg.xml文件名及路径固定,且activiti.cfg.xml文件中有 processEngineConfiguration的配置, 可以使用如下代码创建processEngine:


//直接使用工具类 ProcessEngines,使用classpath下的activiti.cfg.xml中的配置创建processEngine

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

System.out.println(processEngine);

1

2

4.4.2 一般创建方式

//先构建ProcessEngineConfiguration

ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");

//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库

ProcessEngine processEngine = configuration.buildProcessEngine();


4.5 Servcie服务接口

Service是工作流引擎提供用于进行工作流部署、执行、管理的服务接口,我们使用这些接口可以就是操作服务对应的数据表


4.5.1 Service创建方式


通过ProcessEngine创建Service


方式如下:


RuntimeService runtimeService = processEngine.getRuntimeService();

RepositoryService repositoryService = processEngine.getRepositoryService();

TaskService taskService = processEngine.getTaskService();

1

2

4.5.2 Service总览


fb6c25467b210488cda85c487ea9759c_30e700f22967477886d4066f9026bfff.png


简单介绍:


RepositoryService

是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。


除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。


暂停或激活发布包,对应全部和特定流程定义。暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。


获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。


RuntimeService

Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息


TaskService

Activiti的任务管理类。可以从这个类中获取任务的信息。


HistoryService

Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。这个服务主要通过查询功能来获得这些数据。


ManagementService

Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。


五、Activiti入门

在本章内容中,我们来创建一个Activiti工作流,并启动这个流程。


创建Activiti工作流主要包含以下几步:


定义流程,按照BPMN的规范,使用流程定义工具,用流程符号把整个流程描述出来

部署流程,把画好的流程定义文件,加载到数据库中,生成表的数据

启动流程,使用java代码来操作数据库表中的内容

5.1 流程符号

BPMN 2.0是业务流程建模符号2.0的缩写。


它由Business Process Management Initiative这个非营利协会创建并不断发展。作为一种标识,BPMN 2.0是使用一些符号来明确业务流程设计流程图的一整套符号规范,它能增进业务建模时的沟通效率。


目前BPMN2.0是最新的版本,它用于在BPM上下文中进行布局和可视化的沟通。


接下来我们先来了解在流程设计中常见的 符号。


BPMN2.0的基本符合主要包含:


事件 Event

a6c505ddf3bcae86b10f05a9d40cbe3f_ee26d1b1b34e450ca36f044f561aa5a3.png


活动 Activity

活动是工作或任务的一个通用术语。一个活动可以是一个任务,还可以是一个当前流程的子处理流程;其次,你还可以为活动指定不同的类型。常见活动如下:


b4010ecef3cfc5e1bed1c0a2d50a16e0_8a0e5fca7bbf4dbea7d4c86f2a32b821.png


网关 GateWay

网关用来处理决策,有几种常用网关需要了解:


3a6b3a6d1ee4e27ec80ffc8733463520_e09af98a139e4f82a2b1ba1c4b0490f6.png


排他网关 (x)


——只有一条路径会被选择。流程执行到该网关时,按照输出流的顺序逐个计算,当条件的计算结果为true时,继续执行当前网关的输出流;


如果多条线路计算结果都是 true,则会执行第一个值为 true 的线路。如果所有网关计算结果没有true,则引擎会抛出异常。

排他网关需要和条件顺序流结合使用,default 属性指定默认顺序流,当所有的条件不满足时会执行默认顺序流。

并行网关 (+)


——所有路径会被同时选择


拆分 —— 并行执行所有输出顺序流,为每一条顺序流创建一个并行执行线路。

合并 —— 所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行。

包容网关 (+)


—— 可以同时执行多条线路,也可以在网关上设置条件


拆分 —— 计算每条线路上的表达式,当表达式计算结果为true时,创建一个并行线路并继续执行

合并 —— 所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行。

事件网关 (+)


—— 专门为中间捕获事件设置的,允许设置多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后,流程处于等待状态,需要等待抛出事件才能将等待状态转换为活动状态。


流向 Flow

流是连接两个流程节点的连线。常见的流向包含以下几种:


1fb892a6e89675031b2f2395e85ef520_2c5795bdc21d4afd92460e71c9573d2f.png


5.2 流程设计器使用

Activiti-Designer使用

Palette(画板)

在idea中安装插件即可使用,画板中包括以下结点:


Connection—连接

Event—事件

Task—任务

Gateway—网关

Container—容器

Boundary event—边界事件

Intermediate event- -中间事件

流程图设计完毕保存生成.bpmn文件


新建流程(IDEA工具)

首先选中存放图形的目录(选择resources下的bpmn目录),点击菜单:New -> BpmnFile,如图:


da70688ac8ae59590a802194882b8c39_6b22dfcbd4884db9ac3c0070bc4b9343.png


弹出如下图所示框,输入evection 表示 出差审批流程:

eb59c741838bcb6d5c7b372d5006689a_a841c350f59c465b99a217ced8aea8a3.png



起完名字evection后(默认扩展名为bpmn),就可以看到流程设计页面,如图所示:


2bb6304dd2a507dccc46bf0e86f895f6_23a38fbb123545bbb86bc1436549158b.png


左侧区域是绘图区,右侧区域是palette画板区域


鼠标先点击画板的元素即可在左侧绘图


绘制流程

使用滑板来绘制流程,通过从右侧把图标拖拽到左侧的画板,最终效果如下:


72a58272bb2164d61dc9d412a682900c_87e7dea6096f4ca0ade6995935698f3f.png


指定流程定义Key

流程定义key即流程定义的标识,通过properties视图查看流程的key



0901d9cc30d2440d5844f487d397f554_8dc5e9989acf440786af69d3a333f243.png

指定任务负责人

在properties视图指定每个任务结点的负责人,如:填写出差申请的负责人为 zhangsan


475001e7ed28fcf3cd7621b48015f90a_249ef7354fae458fa5110b6d050faa7d.png


经理审批负责人为 jerry

总经理审批负责人为 jack

财务审批负责人为 rose

————————————————

版权声明:本文为CSDN博主「Java技术栈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/youanyyou/article/details/130705348


相关文章
|
6月前
|
XML Java 应用服务中间件
【小白误闯】Activiti 框架你不得不知道的一些事
Activiti 是一个轻量级的、以Java为中心的开源工作流和业务流程管理(BPM)平台。它允许用户在业务应用程序中定义、执行和监控业务流程。以下是Activiti的核心组件【5月更文挑战第8天】
604 1
|
XML 存储 供应链
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(1)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
|
Oracle Java 关系型数据库
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(2)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
|
XML Java 数据库连接
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(4)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
|
Oracle 网络协议 Java
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(二)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(二)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(二)
|
XML 数据可视化 Java
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(三)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(三)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(三)
|
XML 存储 架构师
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(一)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(一)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(一)
|
消息中间件 供应链 JavaScript
万字详解:Activiti 工作流引擎(一)
万字详解:Activiti 工作流引擎(一)
万字详解:Activiti 工作流引擎(一)
|
XML Java API
万字详解:Activiti 工作流引擎(二)
万字详解:Activiti 工作流引擎(二)
万字详解:Activiti 工作流引擎(二)
|
存储 Java 程序员
Activiti工作流引擎进阶【收藏可做笔记系列】
Activiti工作流引擎进阶【收藏可做笔记系列】
Activiti工作流引擎进阶【收藏可做笔记系列】