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

 更新时间:2020年03月09日 10:14:50   作者:程序晓猿  
这篇文章主要介绍了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中的两个核心对象,流程引擎配置对象和流程引擎对象,以及如何获取这两个对象。

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

相关文章

  • 基于Java回顾之集合的总结概述

    基于Java回顾之集合的总结概述

    在这篇文章里,我们关注Java中的集合(Collection)。集合是编程语言中基础的一部分,Java自JDK早期,就引入了Java Collection Framework。设计JCF的那个人,后来还写了一本书,叫《Effective Java》
    2013-05-05
  • IntelliJ IDEA 2021.1 EAP 1 发布支持 Java 16 和 WSL 2

    IntelliJ IDEA 2021.1 EAP 1 发布支持 Java 16 和 WSL 2

    这篇文章主要介绍了IntelliJ IDEA 2021.1 EAP 1 发布支持 Java 16 和 WSL 2,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 使用Java获取Json中的数据简单示例

    使用Java获取Json中的数据简单示例

    开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,下面这篇文章主要给大家介绍了关于使用Java获取Json中的数据,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • SpringBoot打印系统执行的sql语句及日志配置指南

    SpringBoot打印系统执行的sql语句及日志配置指南

    这篇文章主要给大家介绍了关于SpringBoot打印系统执行的sql语句及日志配置的相关资料,在Java SpringBoot项目中如果使用了Mybatis框架,默认情况下执行的所有SQL操作都不会打印日志,需要的朋友可以参考下
    2023-10-10
  • Spring IOC 注入的3种方式小结

    Spring IOC 注入的3种方式小结

    Spring IoC容器支持多种依赖注入方式,本文主要介绍了Spring IOC 注入的3种方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • JavaWeb实现用户登录与注册功能(服务器)

    JavaWeb实现用户登录与注册功能(服务器)

    这篇文章主要介绍了JavaWeb实现用户登录与注册功能,服务器部分的关键代码实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java微信公众号支付示例详解

    java微信公众号支付示例详解

    这篇文章主要为大家详细介绍了java微信公众号支付示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • SpringMVC使用第三方组件实现文件上传

    SpringMVC使用第三方组件实现文件上传

    这篇文章主要介绍了SpringMVC使用第三方组件实现文件上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot项目部署时application.yml文件的加载优先级和启动脚本问题

    SpringBoot项目部署时application.yml文件的加载优先级和启动脚本问题

    Spring Boot在启动时会根据一定的优先级顺序加载配置文件,优先级从高到低依次是:命令行参数、Jar包外部config目录下的配置文件、Jar包同级目录下的配置文件、classpath下的/config目录、classpath根路径
    2024-09-09
  • Java用局域网实现聊天室功能

    Java用局域网实现聊天室功能

    这篇文章主要为大家详细介绍了Java用局域网实现聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论