概述:ProcessEngineConfiguration对象代表一个Activiti流程引擎的全部配置,该类提供一系列创建ProcessEngineConfiguration实例的静态方法,这些方法用于读取和解析相应的配置文件,并返回ProcessEngineConfiguration的实例。出这些静态方法外,该类为其他可配置的引擎属性提供相应的setter和getter方法
此处用到的所有类关系如下图:
一、读取默认的配置文件
说明:
- 在默认情况下,会直接到ClassPath下读取名为“activiti.cfg.xml”的Activiti配置文件,启动并获取名称为“processEngineConfiguration”的bean实例。
- 此处使用的类是StandaloneProcessEngineConfiguration,它是processEngineConfiguration的子子类,因为processEngineConfiguration是抽象类,不能直接使用。
- 文件所在位置如下:
- 以下为一个默认的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">
<!--"&"是转义符,代表"&"-->
<property name="jdbcUrl" value="jdbc:(解析问题,将该括号去除)mysql://localhost:3306/act?useSSL=false&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>
- 此时默认去获取该配置文件的代码如下:
ProcessEngineConfiguration configuration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
System.out.println(configuration.getJdbcUrl());
//结果:jdbc:(解析问题,将该括号去除)mysql://localhost:3306/act
二、读取自定义的配置文件
- 配置文件位置:
- my-activiti1.xml配置文件内容和上面一样,只是文件名变了。
- my-activiti2.xml配置文件的bean的id变了,如下:
- 获取配置文件的方法是两个重载的方法,获取配置文件代码如下:
//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的名称。下面例子只指定了文件位置
- 配置文件位置:
- 配置文件内容和默认配置的activiti.cfg.xml一样
- 获取配置文件见代码如下:
//读取输入流的配置,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
四、获取独立的流程引擎配置(不使用配置文件方式)
- 使用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
- 使用createStandaloneProcessEngineConfiguration方法创建独立的配置,不需要使用配置文件,不过此方法返回的实例是StandaloneProcessEngineConfiguration,其所拥有的属性都是ProcessEngineConfiguration的默认的(可看ProcessEngineConfiguration源码)
代码如下:ProcessEngineConfiguration configuration5 = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
System.out.println(configuration5.getJdbcUrl());
System.out.println(configuration5.getDatabaseSchemaUpdate());
//结果:
//jdbc:(解析问题,将该括号去除)h2:(解析问题,将该括号去除)tcp://localhost/~/activiti
//false