2.3配置文件介绍
本节来介绍两个配置文件,一个是Maven的pom.xml文件,另外一个就是Activiti的默认配置文件activiti.cfg.xml。
2.3.1Activiti配置文件
在bpmn20-example工程的src/test/resources中有一个activiti.cfg.xml文件,此文件就是Activiti的配置文件,用来定义引擎初始化参数、bean、邮件服务器及各种监听器。
代码清单2-1展示了一个标准的Activiti配置文件。
代码清单2-1标准的Activiti配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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 id="processEngineConfiguration" #1
class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"> #2
<property name="databaseType" value="h2" /> #3-S
<property name="databaseSchemaUpdate" value="true"/>
<property name="jobExecutorActivate" value="false" />
<property name="history" value="full" /> #3-E
</bean>
</beans>
在第1章中提到过Activiti和Spring无缝集成,熟悉Spring的读者一眼就看出来这就是Spring的配置文件。是的,在XML的命名空间中定义了spring-bean,即http://www.springframework.org/schema/beans。
#1处定义了一个id为processEngineConfiguration的bean对象,其中processEngine-Configuration即为Activiti默认的引擎配置管理器名称。
#2处指定了一个具体的Java类,由Spring负责实例化引擎配置管理器并注入#3处的一系列配置参数。此处的引擎配置管理器是基于内存数据库的,因为其速度快,常用于测试环境。
#3处的配置参数含义如表2-1所示。
表2-1Activiti引擎配置管理器的参数及其含义
属 性 名 称 属 性 说 明
databaseType 数据库类型,默认为H2。当使用非H2数据库时需要特别声明,例如在生产环境中一般不会使用H2作为数据库。目前Activiti支持的数据库有:H2、MySQl、Oracle、Postgres、 MSSQl、DB2
databaseSchemaUpdate 用来声明数据库脚本更新策略,和hibernate的机制类似。取值如下:
false,什么都不做
true,当Activiti的表不存在时自动创建;当Activiti的jar文件中定义的版本号与数据库中记录的版本号不一致时会自动执行相应的升级脚本,并且会记录升级过程
create-drop,创建引擎时执行初始化脚本,引擎销毁时执行删除数据库脚本
jobExecutorActivate 用来设置是否启用作业执行功能,默认为false。在将该值设置为true之后,引擎会不间断地刷新数据库的作业表,检查是否存在需要执行的作业,有则触发作业的执行。作业的来源有多种,例如各种时间事件或异步任务执行
history 用来设置记录历史的级别,默认为audit。支持以下几种类型:
none,不保存任何历史记录,可以提高系统性能
activity,保存所有的流程实例、任务、活动信息
audit,也是Activiti的默认级别,保存所有的流程实例、任务、活动、表单属性
full: 最完整的历史记录,除了包含audit级别的信息之外还保存详细,例如流程变量、表单属性
2.3.2Maven配置文件
讲解Maven配置文件主要是针对没有接触过Maven或对Maven不太熟悉的读者。
打开bpmn20-example中的pom.xml查看文件内容。下面以代码片段的形式说明Maven配置文件的作用。
要在Maven项目中使用一个依赖只需要声明groupId、artifactId、version三个属性即可,具体的XML如下:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
其中:
groupId,一般以公司或组织的域名倒序定义;
artifactId,一个组件的ID标识;
version,依赖的版本,此处用一个占位符代替实际的版本号。
version标签中的${activiti.version}表达式可以在properties标签中定义属性的值,如下:
<properties>
<activiti.version>5.10</activiti.version>
</properties>
通过指定activiti.version为5.10,Maven就知道需要从仓库下载版本为5.10的Activiti对应的jar文件,还可以下载依赖组件的javadocs或sources等。
Maven在需要下载依赖的时候默认从中央仓库搜索,当匹配到存在的组件时将其从远程下载到本地仓库。但是,当中央仓库不存在某个组件的时候就需要定义第三方仓库供Maven查询、下载。目前Activiti还未被收录到中央仓库,所以我们需要指定一个第三方仓库,即Activiti提供的仓库,告诉Maven当找不到依赖时从此仓库查询。以下代码定义了Activiti的公开仓库(从5.14版本开始,可以从Maven中央仓库直接下载):
<!-- Maven仓库定义 -->
<repositories>
<!-- Activiti的仓库 -->
<repository>
<id>Activiti</id>
<url>http://maven.alfresco.com/nexus/content/repositories/activiti</url>
</repository>
</ repositories>
以此类推,当日常开发中遇到某些依赖组件不存在的情况时,可以先查看官方网站是否提供了Maven仓库,如果有则加入到repositories中,否则只能用私服的方式(私服如何使用不在本书讨论范围内,读者可以参考《Maven实战》一书)。