Activiti流程引擎对象及配置原理解析

流程引擎对象和其配置对象都是activiti的核心对象

一、activiti的简单使用流程

activiti在工作时,一般有以下几个步骤:

  • 创建一个流程引擎配置对象ProcessEngineConfiguration对流程引擎进行配置
  • 通过流程引擎配置对象来获取流程引擎对象ProcessEngine
  • 通过流程引擎对象来部署流程图
  • 启动流程

二、流程引擎配置对象ProcessEngineConfiguration的介绍

activiti用ProcessEngineConfiguration对象来配置流程引擎。ProcessEngineConfiguration类提供了多个创建该类对象的静态方法,可以读取相应的配置文件,返回ProcessEngineConfiguration实例。通过该类中提供的getter和setter方法可以对流程引擎配置对象进行配置。

三、activiti配置文件的介绍

activiti创建流程引擎配置对象时需要一个配置文件,

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

  <!-- 配置使用默认bean名称的流程引擎配置对象 -->
  <bean id="processEngineConfiguration"
    class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_01"></property>
    <property name="jdbcUsername" value="root"></property>
    <property name="jdbcPassword" value="root"></property>
    <property name="databaseSchemaUpdate" value="true"></property>
  </bean>

</beans>

仔细观察这个配置文件,这其实是一个spring的配置文件,在其中配置了一个ProcessEngineConfiguration类的bean,然后在代码中就可以读取这个配置文件,获取这个bean。

processEngineConfiguration这个bean要注入的属性:

(1)数据库连接相关的属性

(2)databaseSchemaUpdate,数据库策略,

  • false:默认值,设置为该值,activiti在启动时如果数据库中没有表或者版本不匹配,会抛出异常
  • true:启动时会对所有表进行更新,如果没有表就会自动创建表
  • create-drop: 启动时创建表,关闭时删除表

针对其中的数据库连接相关的属性,我们还可以在这个配置文件中再配置一个数据源,在这里引用数据源的bean

<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_01"/>
  <property name="user" value="root"/>
  <property name="password" value="root"/>
</bean>

四、获取流程引擎配置对象

4.1 读取默认名称的配置文件来创建配置对象

ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault() 这个方法会在classpath下读取名为activiti.cfg.xml的配置文件,并获取名称为processEngineConfiguration的bean返回。

所以如果在resources目录下给定一个activiti.cfg.xml配置文件,在其中创建一个名为processEngineConfiguration的bean,在程序中调用这个方法就可以得到流程引擎配置对象。

  /**
   * 用ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault()
   * 创建流程引擎配置对象
   */
  @Test
  public void test1() {
    ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
    System.out.println(configuration);
  }

4.2 读取自定义名称的配置文件来创建流程引擎配置对象

ProcessEngineConfiguration.createProcessEngineConfigurationFromResource()方法可以加载指定位置的配置文件,并获取给定名称的bean来得到流程引擎配置对象。

  @Test
  public void test2() {
    ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("cfg/activiti-cfg.xml", "processEngineConfiguration");
    System.out.println(configuration);
  }

五、流程引擎对象

ProcessEngine,流程引擎对象,是activiti的核心对象之一,使用该对象来部署流程。

要获取该对象时,需要先获取ProcessEngineConfiguration 流程引擎配置对象来对流程引擎进行配置,然后通过这个配置对象来获取流程引擎对象。下面说明下如何获取流程引擎对象

5.1 buildProcessEngine方法创建
这个方法是ProcessEngineConfiguration类的实例方法,该方法返回一个已经配置好的流程引擎对象

  @Test
  public void testCreateProcessEngine() {
    ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
    ProcessEngine processEngine = configuration.buildProcessEngine();
    System.out.println(processEngine);
  }

5.2 用ProcessEngines类来获取

activiti在ProcessEngines类中也提供了创建流程引擎对象的方法,这是一个创建和关闭流程引擎的工具类,所有创建的(包括使用其他方式创建的)ProcessEngine实例都会被注册到ProcessEngines中,实际上是在该类中维护了一个Map对象,key为ProcessEngine实例的名称,value为ProcessEngine实例。

5.2.1使用ProcessEngines.init()方法获取

ProcessEngines的init方法,会读取activiti的默认配置文件,即classpath下的activiti.cfg.xml文件,并将创建的流程引擎实例缓存到map中,该方法会在map中创建key=default的ProcessEngine对象,

然后我们就可以先获取到这个map,然后从map中获取key=defalut的流程引擎对象。

  @Test
  public void testCreateProcessEngine2() {
    //读取配置文件,创建流程引擎对象缓存到map中
    ProcessEngines.init();
    //获取map
    Map<String, ProcessEngine> enginesMap = ProcessEngines.getProcessEngines();
    //获取key为default的对象
    ProcessEngine processEngine = enginesMap.get("default");
    System.out.println(processEngine);
  }

5.2.2 使用getDefaultProcessEngine()方法获取

ProcessEngines的getDefaultProcessEngine()方法,会返回缓存map中的key为default的流程引擎对象,如果这个map还没有进行初始化,该方法就会先调用ProcessEngines.init()方法初始化缓存map,然后再获取key为default的流程引擎对象。

  @Test
  public void testCreateProcessEngine3() {
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
    System.out.println(defaultProcessEngine);
  }

比较以上的几种创建流程引擎的方式,我们一般选择ProcessEngines.getDefaultProcessEngine()方法来获取,

因为这种方式最简单,只需要提供一个使用默认名称的配置文件activiti.cfg.xml,在其中做好对流程引擎的配置

然后我们就可以直接获取流程引擎对象。

六、总结

以上介绍了activiti中的两个核心对象,流程引擎配置对象和流程引擎对象,以及如何获取这两个对象。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Activiti explorer.war示例工程使用过程图解

    工作流主要解决的主要问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档.信息或者任务. activiti官方提供了一个示例工程activiti-explorer.war,运行这个工程可以体验activiti的基本功能,了解工作流的基本使用. 本文中使用的是activiti-5.22.0的官方包, 下载地址 一.搭建开发环境 要运行示例工程,需要安装jdk8和tomcat.其中jdk需要jdk8或以上,tomcat我使用的是tomcat8,使用tomcat7时启动会

  • Spring和activiti进行整合过程解析

    一.整合原理 activiti的配置文件本身就是一个spring的配置文件,但默认情况下只讲ProcessEngineConfiguration作为一个bean来使用,调用ProcessEngines.getDefaultProcessEngine()加载的就是配置文件中的这个bean.和spring整合后就可以把bean的管理让spring来进行,在代码中获取任意的bean. activiti提供了一个spring模块,在一个spring工程中引入这个模块就能够整合 <dependency>

  • SpringBoot整合Activiti7的实现代码

    Activiti7发布正式版之后,它与SpringBoot2.x已经完全支持整合开发.我们可以将Activiti7与SpringBoot整合开发的坐标引入到工程中,从而达到SpringBoot支持Activti7整合. 1.使用IDEA创建SpringBoot项目 在工程的pom.xml文件中引入相关的依赖,具体依赖如下所示 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht

  • android: targetSdkVersion升级中Only fullscreen activities can request orientation问题的解决方法

    前言 这几天同事跟我在升级Android target SDK和build tool版本的时候,碰到了一个非常搞笑的问题,基本可以算作是"坑"了!我在这里跟大家分享一下,希望对您有所帮助. 特征 当我们把targetSdkVersion升级到27,buildToolsVersion和相关的support library升级到27.0.1后,在Android 8.0(API level 26)上,部分Activity出现了一个莫名其妙的crash,异常信息如下: java.lang.Ru

  • SpringBoot2整合activiti6环境搭建过程解析

    这篇文章主要介绍了SpringBoot2整合activiti6环境搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </d

  • Activiti开发环境的搭建过程详解

    本文中使用maven+eclipse搭建activiti-5.14的开发环境 一.创建maven工程 创建一个普通的java工程,pom文件的内容如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/PO

  • 解决Springboot2.1.x配置Activiti7单独数据源问题

    1|1简介 最近基于最新的Activiti7配置了SpringBoot2. 简单上手使用了一番.发现市面上解决Activiti7的教程很少,采坑也比较多,在Activiti6配置数据源和Activiti7有所区别,基于Activiti6在Activiti7里是无法正常使用的.接下来让我们看下区别. 1|2问题 Activiti6多数据源配置 6的配置比较简单点. 先加入配置: # activiti 数据源 spring.datasource.activiti.driver=com.mysql.j

  • Activiti流程引擎对象及配置原理解析

    流程引擎对象和其配置对象都是activiti的核心对象 一.activiti的简单使用流程 activiti在工作时,一般有以下几个步骤: 创建一个流程引擎配置对象ProcessEngineConfiguration对流程引擎进行配置 通过流程引擎配置对象来获取流程引擎对象ProcessEngine 通过流程引擎对象来部署流程图 启动流程 二.流程引擎配置对象ProcessEngineConfiguration的介绍 activiti用ProcessEngineConfiguration对象来配

  • JavaScript对象原型链原理解析

    这篇文章主要介绍了JavaScript对象原型链原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个js对象,除了自己设置的属性外,还会自动生成proto.class.extensible属性,其中,proto属性指向对象的原型. 对象的属性也有writable.enumerable.configurable.value和get/set的配置方法. 对象的创建方式有三种: 一.使用字面量直接创建. 二.基于原型链创建. 分析上图,要点如

  • springboot自动配置原理解析

    前言 小伙伴们都知道,现在市面上最流行的web开发框架就是springboot了,在springboot开始流行之前,我们都用的是strust2或者是springmvc框架来开发web应用,但是这两个框架都有一个特点就是配置非常的繁琐,要写一大堆的配置文件,spring在支持了注解开发之后稍微有些改观但有的时候还是会觉得比较麻烦,这个时候springboot就体现出了它的优势,springboot只需要一个properties或者yml文件就可以简化springmvc中在xml中需要配置的一大堆

  • Springboot启动原理和自动配置原理解析

    目录 启动原理 SpringApplication 1.初始化 2.调用run方法 自动配置原理 放本地文件夹都快吃土了,准备清理文件夹,关于Springboot的! 启动原理 @SpringBootApplication public class Start { public static void main(String[] args) { SpringApplication.run(Start.class, args); } } SpringApplication 1.初始化 public

  • Spring Boot 中嵌入式 Servlet 容器自动配置原理解析

    目录 1.参照 Spring Boot 自动配置包里面的web模块 2.EmbeddedServletContainerFactory(嵌入式Servlet容器工厂) 3.EmbeddedServletContainer(嵌入式的Servlet容器) 4.以TomcatEmbeddedServletContainerFactory为例 5.嵌入式容器的配置修改生效原理 1.参照 Spring Boot 自动配置包里面的web模块 EmbeddedServletContainerAutoConfi

  • Python参数传递对象的引用原理解析

    大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型. python采用的是传递对象的引用,为了方便说明,我们来看一个例子: test = [1] def change1(a): a = [2] def change2(a): a.append(3) change1(test) change2(test) print test 我们来看一下最后的输出: [1,3] 是不是有人误以为是[2,3]?那你可

  • Hibernate持久化对象生命周期原理解析

    三态的基本概念 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: 2, 持久化状态(Persistent):与session关联并且在数据库中有相应数据.已经持久化,加入到了Session缓存中.如通过hibernate语句保存的对象.处于此状态的对象叫持久对象: 3, 游离状态(Detached):持久化对象脱离了Session的对象.如Session缓存被清空的

  • Activiti流程文件部署过程解析

    用bpmn规范定义好一个流程得到流程定义文件后,需要把该文件部署到activiti的数据库后,这个流程才可以使用. activiti中和流程定义相关的操作都需要使用RepositoryService这个服务组件来进行. activiti中所有的服务组件都需要通过流程引擎对象来获取 一.RepositoryService服务组件 这个组件中提供了一系列管理流程定义和流程部署的api,我们可以使用这个组件中的api来部署流程 1.1 RepositoryService实例对象的获取 使用流程引擎对象

  • Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析

    网上关于工作流引擎Activiti生成表的机制大多仅限于四种策略模式,但其底层是如何实现的,相关文章还是比较少,因此,觉得撸一撸其生成表机制的底层原理. 我接触工作流引擎Activiti已有两年之久,但一直都只限于熟悉其各类API的使用,对底层的实现,则存在较大的盲区. Activiti这个开源框架在设计上,其实存在不少值得学习和思考的地方,例如,框架用到以命令模式.责任链模式.模板模式等优秀的设计模式来进行框架的设计. 故而,是值得好好研究下Activiti这个框架的底层实现. 我在工作当中现

  • 阿里面试Nacos配置中心交互模型是push还是pull原理解析

    目录 引言 配置中心 长轮询 Nacos初识 几个概念 客户端源码分析 结束语 引言 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现.配置管理,非常好用的一个工具.然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏. 比如我们今天要讨论的话题,Nacos在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端主动拉的? 这里我先抛出答案:客户端主动拉的! 接下来咱们扒一扒Nacos的源码,来看看它具体是如何实现的? 配置中心 聊N

随机推荐