第二节:Activiti6.0配置文件的读取

506 阅读3分钟

概述:ProcessEngineConfiguration对象代表一个Activiti流程引擎的全部配置,该类提供一系列创建ProcessEngineConfiguration实例的静态方法,这些方法用于读取和解析相应的配置文件,并返回ProcessEngineConfiguration的实例。出这些静态方法外,该类为其他可配置的引擎属性提供相应的setter和getter方法

此处用到的所有类关系如下图:

类关系

一、读取默认的配置文件

说明

  • 在默认情况下,会直接到ClassPath下读取名为“activiti.cfg.xml”的Activiti配置文件,启动并获取名称为“processEngineConfiguration”的bean实例。
  • 此处使用的类是StandaloneProcessEngineConfiguration,它是processEngineConfiguration的子子类,因为processEngineConfiguration是抽象类,不能直接使用。
  1. 文件所在位置如下:

    默认配置

  2. 以下为一个默认的activiti.cfg.xml的配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
       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">

    <!--流程引擎配置的bean-->
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

		<!--"&amp"是转义符,代表"&"-->
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/act?useSSL=false&amp;characterEncoding=UTF-8" />
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="123456" />

		<!--该属性有三个取值,说明如下:
            1. false: false为默认值,设置为该值后, Activiti 在启动时, 会对比数据库表中保存的版本,
                    如果没有表或者版本不匹配时, 将在启动时抛出异常。
            2. true: 设置为该值后, Activiti 会对数据库中所有的表进行更新, 如果表不存在, 则Activiti 会自动创建。
            3. create-drop: Activiti 启动时, 会执行数据库表的创建操作, 在 Activiti 关闭时, 执行数据库表的删除操作。
        -->
        <property name="databaseSchemaUpdate" value="true" />
    </bean>

</beans>
  1. 此时默认去获取该配置文件的代码如下:
ProcessEngineConfiguration configuration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
System.out.println(configuration.getJdbcUrl());
        
//结果:jdbc:mysql://localhost:3306/act

二、读取自定义的配置文件

  1. 配置文件位置:
    配置文件位置
  2. my-activiti1.xml配置文件内容和上面一样,只是文件名变了。
  3. my-activiti2.xml配置文件的bean的id变了,如下:
    bean
  4. 获取配置文件的方法是两个重载的方法,获取配置文件代码如下:
//1.指定配置文件创建ProcessEngineConfiguration:
//Activiti会到ClassPath下查找my-activiti1.xml的配置文件,并创建名称为"processEngineConfiguration的bean
ProcessEngineConfiguration configuration1 =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti1.xml");
System.out.println(configuration1.getJdbcUrl());
//结果:jdbc:mysql://localhost:3306/act

//2.指定配置文件创建ProcessEngineConfiguration,两个参数:第一个为配置文件位置,第二个为创建bean的名称
ProcessEngineConfiguration configuration2 =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti2.xml","test");
System.out.println(configuration2.getJdbcUrl());
//结果:jdbc:mysql://localhost:3306/act

三、读取输入流的配置

说明

  • ProcessEngineConfiguration中提供了一个createProcessEngineConfigurationFromInputStream方法,该方法使得Activiti配置文件的加载不在局限于项目的ClassPath,只要得到配置文件的输入流,即可创建ProcessEngineConfiguration。
  • 该方法也提供了两个重载的方法,可以知道在解析时bean的名称。下面例子只指定了文件位置
  1. 配置文件位置:
    配置文件位置
  2. 配置文件内容和默认配置的activiti.cfg.xml一样
  3. 获取配置文件见代码如下:
//读取输入流的配置,file的根目录是项目名称的位置:此处即为first-activiti
File file = new File("test/input-stream.xml");
InputStream inputStream = new FileInputStream(file);
ProcessEngineConfiguration configuration3 = ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream);
System.out.println(configuration3.getJdbcUrl());
//结果:jdbc:mysql://localhost:3306/act

四、获取独立的流程引擎配置(不使用配置文件方式)

  1. 使用creatStandaloneInMemProcessEngineConfiguration方法创建ProcessEngineConfiguration,该方法返回的是StandaloneInMemProcessEngineConfiguration。使用该方法不用Activiti配置文件。并且该实例值只默认了如下两个属性(可看源码):
  • this.databaseSchemaUpdate = "create-drop";
  • this.jdbcUrl = "jdbc:h2:mem:activiti"; 代码如下
ProcessEngineConfiguration configuration4 = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
System.out.println(configuration4.getJdbcUrl());
System.out.println(configuration4.getDatabaseSchemaUpdate());

//结果:
//jdbc:h2:mem:activiti
//create-drop
  1. 使用createStandaloneProcessEngineConfiguration方法创建独立的配置,不需要使用配置文件,不过此方法返回的实例是StandaloneProcessEngineConfiguration,其所拥有的属性都是ProcessEngineConfiguration的默认的(可看ProcessEngineConfiguration源码) 代码如下:
ProcessEngineConfiguration configuration5 = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
System.out.println(configuration5.getJdbcUrl());
System.out.println(configuration5.getDatabaseSchemaUpdate());

//结果:
//jdbc:h2:tcp://localhost/~/activiti
//false

看《疯狂workflow讲义第二版》