Activiti工作流引擎配置

工作流引擎对象ProcessEngine 和其配置对象ProcessEngineConfiguration都是Activiti的核心

对象。Activiti工作流引擎启动时,需要经过以下两个步骤:

  • 创建一个工作流引擎配置对象ProcessEngineConfiguration对工作流引擎进行配置;

  • 通过工作流引擎配置对象创建工作流引擎对象ProcessEngine。

工作流引擎配置对象ProcessEngineConfiguration

在Activiti工作流引擎中,需要进行很多参数配置,如数据库配置、事务配置、工作流引擎内置服务配置 等,Activiti通过工作流引擎配置对象封装这些配置。工作流引擎配置对象ProcessEngineConfiguration存储Activiti工作流引擎的全部配置,代表Activiti的一个配置实例,通过该类提供的setter()和getter()方法可以对工作流引擎的可配置属性进行配置和获取。ProcessEngineConfiguration本身是一个抽象类,它与子类的结构图如图所示。

ProcessEngineConfiguration是所有配置类的父类,有一个ProcessEngineConfigurationImpl子类(这个子类也是抽象类)。ProcessEngineConfigurationImpl有4个直接子类,分别如下。

org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration :标准工作流引擎配置类。使用该类 作为配置对象,工作流引擎处于独立环境下时,Activiti将会对数据库事务进行管理。默认情况下, 工作流引擎启动时会检查数据库结构及版本是否正确。 org.activiti.spring.SpringProcessEngineConfiguration :Spring环境工作流引擎配置类。当Activiti与Spring 整合时,可以使用该类。它提供了以下重要功能:创建工作流引擎实例对象,在工作流引擎启动后 自动部署配置的流程文档(需要设置),设置工作流引擎连接的数据源、事务管理器等。这是常用的 一种配置方式,由Spring代理创建工作流引擎和管理数据库事务。将Activiti引擎嵌入业务系统,可以 实现业务系统事务与Activiti引擎事务的统一管理。 org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration :JTA工作流引擎配置类。该类不使用Activiti 管理事务,而是使用JTA管理事务。 org.activiti.engine.impl.cfg.multitenant.MultiSchemaMultiTenantProcessEngineConfiguration:多数据库多 租户工作流引擎配置类。Activiti通过此类提供自动路由机制,当工作流引擎需要连接多个数据库时, 客户端无须关心工作流引擎要连接哪个数据库,该类会通过路由规则自动选择需要操作的数据库, 且数据库操作对客户端透明,客户端无须关心其内部路由实现机制。

其中,StandaloneProcessEngineConfiguration类有一个子类org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration,适用于单元测试,默认采用H2数据库存储数据,由Acitviti处理事务。

ProcessEngineConfiguration类提供了多个创建该类对象的静态方法:

  •  ProcessEngineConfiguration createProcessEngineConfigurationFromResourceDefault();
  •  ProcessEngineConfiguration createProcessEngineConfigurationFromResource(String resource);
  •  ProcessEngineConfiguration createProcessEngineConfigurationFromResource(String resource, String beanName);
  •  ProcessEngineConfiguration createProcessEngineConfigurationFromInputStream(InputStream inputStream);
  •  ProcessEngineConfiguration createProcessEngineConfigurationFromInputStream(InputStream inputStream,
  • String beanName);
  •  ProcessEngineConfiguration createStandaloneProcessEngineConfiguration();
  •  ProcessEngineConfiguration createStandaloneInMemProcessEngineConfiguration()。 这些方法会读取和解析相应的配置文件,并通过该类中的setter()和getter()方法对工作流引擎配置对象进 行配置和获取,然后返回该对象的实例。
scss 复制代码
1.createProcessEngineConfigurationFromResourceDefault()方法

该方法通过加载默认配置文件来创建工作流引擎配置对象,源码如下:

public static ProcessEngineConfiguration

createProcessEngineConfigurationFromResourceDefault() {

return createProcessEngineConfigurationFromResource("activiti.cfg.xml",

"processEngineConfiguration");

}

从上述源码可知,该方法默认加载classpath下的activiti.cfg.xml文件,该文件是Spring环境的bean配置文

件,利用Spring的依赖注入,获取名称为processEngineConfiguration的bean实例。activiti.cfg.xml配置文件相关

内容将在后面节介绍。

采用默认方式创建工作流引擎配置对象的示例代码如下:

public void testCreateFromResourceDefault() {

ProcessEngineConfiguration processEngineConfigurationFromResourceDefault =

ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();

System.out.println(processEngineConfigurationFromResourceDefault);

}

2.createProcessEngineConfigurationFromResource()方法

该方法通过加载自定义配置文件来创建一个工作流引擎配置对象,源码如下:

public static ProcessEngineConfiguration

createProcessEngineConfigurationFromResource(String resource, String beanName) {

return 

BeansConfigurationHelper.parseProcessEngineConfigurationFromResource(resource, beanName);

}

从上述源码可知,该方法并非加载默认配置文件activiti.cfg.xml,而是加载指定的配置文件,并获取给定

名称的bean从而创建一个工作流引擎配置对象。该方法有两个参数,一个是文件名称的字符串参数,另一个是

通过指定配置文件完成依赖注入的对象的名称字符串。其在org.activiti.engine.impl.cfg.BeansConfigurationHelper

类中实现,源代码如下:

public static ProcessEngineConfiguration

parseProcessEngineConfigurationFromResource(String resource, String beanName) {

Resource springResource = new ClassPathResource(resource);

return parseProcessEngineConfiguration(springResource, beanName);

}

public static ProcessEngineConfiguration parseProcessEngineConfiguration(Resource

springResource, String beanName) {

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();

XmlBeanDefinitionReader xmlBeanDefinitionReader = new

XmlBeanDefinitionReader(beanFactory);

xmlBeanDefinitionReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD);

xmlBeanDefinitionReader.loadBeanDefinitions(springResource);

ProcessEngineConfigurationImpl processEngineConfiguration =

(ProcessEngineConfigurationImpl) beanFactory.getBean(beanName);

processEngineConfiguration.setBeans(new SpringBeanFactoryProxyMap(beanFactory));

return processEngineConfiguration;

}

从以上代码段可知,这种加载方法的实现步骤如下。

(1)使用ClassPathResource访问classpath下根据resource参数指定的配置文件,将其转换成Resource对象。

(2)通过XmlBeanDefinitionReader设置一个BeanDefinitionRegistry子类DefaultListableBeanFactory,作为

Spring的beanFactory。

(3)通过XmlBeanDefinitionReader加载由配置文件转换得到的Resource对象。

(4)在beanFactory中通过参数beanName获取processEngineConfiguration的实例,并将beanFactory赋给

processEngineConfiguration。

通过以上4步操作,Activiti通过Spring完成了ProcessEngineConfiguration类的配置、加载和获取,在

processEngineConfiguration中可以通过beanFactory直接获取配置文件中的bean。这种加载方式的好处是

Activiti可以对自身的工作流引擎配置信息进行单独管理,不受其他Spring配置文件的干扰,实现了配置文件

管理的隔离。

此外,ProcessEngineConfiguration还提供了createProcessEngineConfigurationFromResource(String resource)

方法:

public static ProcessEngineConfiguration

createProcessEngineConfigurationFromResource(String resource) {

return createProcessEngineConfigurationFromResource(resource,

"processEngineConfiguration");

}

该方法默认加载classpath下指定的XML配置文件,传入String类型的resource参数,指定bean为

processEngineConfiguration的ProcessEngineConfiguration实例。

通过读取自定义配置文件创建工作流引擎配置对象的示例代码如下:

public void testCreateFromResource() {

ProcessEngineConfiguration processEngineConfigurationFromResource =

ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(

"resource/my-config.xml","myProcessEngineConfiguration");

System.out.println(processEngineConfigurationFromResource);

}

由以上代码段可知,Activiti会在classpath下查找my-config.xml配置文件,并创建一个名为myProcess

EngineConfiguration的工作流引擎配置对象。

3.createProcessEngineConfigurationFromInputStream()方法

该方法基于配置文件输入流创建工作流引擎配置对象。这种方法不再限制Activiti必须将配置文件放在

classpath下,可以通过输入流加载任意路径下的配置文件,从而创建ProcessEngineConfiguration实例。其源

码中也提供了两种createProcessEngineConfigurationFromInputStream()方法,代码如下:

public static ProcessEngineConfiguration

createProcessEngineConfigurationFromInputStream(InputStream inputStream) {

return createProcessEngineConfigurationFromInputStream(inputStream,

"processEngineConfiguration");

}

public static ProcessEngineConfiguration

createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName) {

return

BeansConfigurationHelper.parseProcessEngineConfigurationFromInputStream(

inputStream, beanName);

}

第1种方法只需传入配置文件输入流,默认获取一个名为processEngineConfiguration的ProcessEngineConfiguration

实例。第2种方法不仅可传入配置文件输入流,还可传入指定beanName的ProcessEngineConfiguration实例。其

在org.activiti.engine.impl.cfg.BeansConfigurationHelper类中实现,源代码如下:

public static ProcessEngineConfiguration

parseProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName) {

Resource springResource = new InputStreamResource(inputStream);

return parseProcessEngineConfiguration(springResource, beanName);

}

由以上代码段可知,该方法先将输入流转换为Resource对象,然后调用parseProcessEngineConfiguration()

方法创建一个ProcessEngineConfiguration实例。

使用createProcessEngineConfigurationFromInputStream()方法创建工作流引擎配置对象的示例代码如下:

public void testCreateFromInputStream() {

File file = new File("resource/my-config.xml");

// 获取文件输入流

InputStream fis = new FileInputStream(file);

//使用createProcessEngineConfigurationFromInputStream()方法创建

//ProcessEngineConfiguration

ProcessEngineConfiguration processEngineConfigurationFromInputStream =

ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(fis,

"myProcessEngineConfiguration");

System.out.println(processEngineConfigurationFromInputStream);

}

由以上代码段可知,Activiti根据my-config.xml配置文件输入流,创建了一个名为myProcessEngineConfiguration

的工作流引擎配置对象。

4.createStandaloneProcessEngineConfiguration()方法

该方法基于硬编码创建工作流引擎配置对象,不加载任何配置文件,所有数据属性均硬编码在代码中。

该方法的源码如下:

public static ProcessEngineConfiguration

createStandaloneProcessEngineConfiguration() {

return new StandaloneProcessEngineConfiguration();

}

public class StandaloneProcessEngineConfiguration extends ProcessEngineConfigurationImpl {

@Override

public CommandInterceptor createTransactionInterceptor() {

return null;

}

}

由以上代码段可知,此方法返回的实例是StandaloneProcessEngineConfiguration,其所有属性均已在

ProcessEngineConfiguration中设置。该方法的属性配置(如数据库连接配置)在代码中手动进行,示例代码

如下:

public void testCreateFromStandalone() {

ProcessEngineConfiguration processEngineConfigurationFromStandalone =

ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();

processEngineConfigurationFromStandalone.setJdbcDriver("com.mysql.jdbc.Driver");

processEngineConfigurationFromStandalone.setJdbcUrl("jdbc:mysql://localhost:3306/workflow");

processEngineConfigurationFromStandalone.setJdbcUsername("root");

processEngineConfigurationFromStandalone.setJdbcPassword("root");

processEngineConfigurationFromStandalone.setDatabaseSchemaUpdate("true");

System.out.println(processEngineConfigurationFromStandalone);

}

5.createStandaloneInMemProcessEngineConfiguration()方法

该方法也是基于硬编码创建工作流引擎配置对象,同样不加载任何配置文件,所有数据属性也是硬编码

在代码中。该方法的源码如下:

public static ProcessEngineConfiguration

createStandaloneInMemProcessEngineConfiguration() {

return new StandaloneInMemProcessEngineConfiguration();

}

public class StandaloneInMemProcessEngineConfiguration extends

StandaloneProcessEngineConfiguration {

public StandaloneInMemProcessEngineConfiguration() {

this.databaseSchemaUpdate = DB_SCHEMA_UPDATE_CREATE_DROP;

this.jdbcUrl = "jdbc:h2:mem:activiti";

}

}

由以上代码段可知,此方法返回实例StandaloneInMemProcessEngineConfiguration,它是StandaloneProcess

EngineConfiguration的子类,只特别指定了databaseSchemaUpdate属性和jdbcUrl属性,值分别为DB_SCHEMA_

UPDATE_CREATE_DROP和jdbc:h2:mem:activiti,说明该方法默认使用h2内存数据库。如果在代码编写过程

中需要改变某个属性的值,需要调用这个类的set()方法。

使用createStandaloneInMemProcessEngineConfiguration()方法创建工作流引擎配置对象的示例代码

如下:

public void testCreateFromStandaloneInMem() {

ProcessEngineConfiguration processEngineConfigurationFromStandaloneInMem =

ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();

System.out.println(processEngineConfigurationFromStandaloneInMem);

工作流引擎对象ProcessEngine

工作流引擎对象ProcessEngine是Activiti的核心对象之一,一个ProcessEngine实例代表一个工作流引擎,使用ProcessEngine提供的诸如getRuntimeService()、getTaskService()、getRepositoryService()和getHistoryService()等一系列方法可以获取对应的工作流引擎服务,用于执行工作流部署、执行、管理等操作。

要获取ProcessEngine,需要先获取ProcessEngineConfiguration配置工作流引擎。创建ProcessEngine的方法一般有以下两种。

  • 通过ProcessEngineConfiguration的buildProcessEngine()方法创建;
  • 通过ProcessEngines创建。

1.通过ProcessEngineConfiguration的buildProcessEngine()方法创建 ProcessEngineConfiguration负责Activiti框架的属性配置、初始化工作,初始化入口是buildProcessEngine()方法。这种方式先通过调用ProcessEngineConfiguration类的静态方法,加载相应的XML配置文件,获取ProcessEngineConfiguration实例,然后调用buildProcessEngine()方法,创建一个ProcessEngine对象。其示例代码 如下:

java 复制代码
public void createProcessEngineByBuildProcessEngineTest() {
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResourceDefault();
ProcessEngine processEngine = configuration.buildProcessEngine();
System.out.println(processEngine);
}

以上代码段先使用ProcessEngineConfiguration的createProcessEngineConfigurationFromResourceDefault()静态 方法加载默认配置文件activiti.cfg.xml,获取一个ProcessEngineConfiguration实例,然后调用其buildProcessEngine()方法创建工作流引擎。在实际应用中,可以根据具体场景选择不同方法获取ProcessEngineConfiguration实例。

2.通过ProcessEngines创建

ProcessEngines是一个创建、关闭工作流引擎的工具类,所有创建的ProcessEngine实例均被注册到 ProcessEngines中。它类似一个容器工厂,维护了一个Map,其key为ProcessEngine实例的名称,value为 ProcessEngine实例。通过ProcessEngines类创建工作流引擎对象的方法有以下两种。

通过ProcessEngines.init()方法创建。ProcessEngines的init()方法会依次扫描、解析classpath下的activiti.cfg.xml和activiti-context.xml文件,并将创建的工作流引擎对象缓存到Map中。该方法会在Map中创建key值为default的ProcessEngine对象,然后就可以先获取这个Map,再通过Map获取key=defalut的工作流引擎对象了。其示例代码如下:

java 复制代码
public void createProcessEngineByInitTest() {
//读取activiti.cfg.xml配置文件,创建工作流引擎对象缓存到Map中
ProcessEngines.init();
//获取Map
Map<String, ProcessEngine> enginesMap = ProcessEngines.getProcessEngines();
//获取key为default的对象
ProcessEngine processEngine = enginesMap.get("default");
System.out.println(processEngine);

}

通过getDefaultProcessEngine()方法创建**。ProcessEngines的getDefaultProcessEngine()方法会返回缓存Map中key值为default的工作流引擎对象,如果该Map还没有进行初始化,getDefaultProcessEngine()方法会先调用ProcessEngines.init()方法初始化缓存Map,然后再获取key为default的工作流引擎对象。 其示例代码如下:

java 复制代码
public void createProcessEngineByGetDefaultProcessEngineTest() {
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(defaultProcessEngine);

}

一般建议使用ProcessEngines的getDefaultProcessEngine()方法创建ProcessEngine。这是因为它比较简单,只需提供默认配置文件activiti.cfg.xml,并做好对工作流引擎配置,即可创建一个工作流引擎对象。

Activiti工作流引擎配置文件 工作流引擎配置对象ProcessEngineConfiguration需要通过加载、解析流程配置文件完成初始化。Activiti

配置文件主要有以下两种配置方式。

  •  遵循Activiti配置风格。这种方式是Activiti的默认配置方式,使用这种方式的配置文件名称为activiti.cfg.xml。对于activiti.cfg.xml文件,工作流引擎会使用Activiti的经典方式---ProcessEngineConfiguration. createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine()构建,具体逻辑详见org.activiti.engine.ProcessEngines的initProcessEngineFromResource(URL resourceUrl)方法。
  •  遵循Spring配置风格。这种方式一般在与Spring集成时使用,使用这种方式的文件名称可以自定义, 如activiti.context.xml、spring.activiti.xml等。对于activiti.context.xml文件,工作流引擎会使用Spring方法构建:先创建一个Spring环境,然后通过该环境获得工作流引擎,具体逻辑详见org.activiti.engine.ProcessEngines的initProcessEngineFromSpringResource (URL resource)方法。 以上两种方式均可以实现工作流引擎的配置,下面将分别对其进行详细说明。

Activiti配置风格

activiti.cfg.xml配置文件内容如下:

xml 复制代码
<?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="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="org.h2.Driver"/>

<property name="url" value="jdbc:h2:mem:activiti"/>

<property name="username" value="sa"/>

<property name="password" value=""/>

</bean>

<!--activiti工作流引擎-->

<bean id="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

<!-- 数据源 -->

<property name="dataSource" ref="dataSource"/>

<!-- 数据库更新策略 -->

<property name="databaseSchemaUpdate" value="true"/>

</bean>

</beans>

从以上配置文件内容可知,activiti.cfg.xml配置文件采用Spring bean配置文件格式。其先定义了一个id为 processEngineConfiguration的bean对象,即Activiti默认引擎配置管理器,接着为其指定一个具体的Java类org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration,由Spring负责实例化引擎配置管理器并注入一系列配置。使用这种方式配置工作流引擎的示例代码如下:

ini 复制代码
public void createProcessEngineByGetDefaultProcessEngineTest() {
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine processEngine = configuration.buildProcessEngine();
System.out.println(processEngine);

Spring配置风格

activiti.context.xml配置文件内容如下:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

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.xsd">

<!--数据源配置-->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="org.h2.Driver"/>

<property name="url" value="jdbc:h2:mem:activiti"/>

<property name="username" value="sa"/>

<property name="password" value=""/>

</bean>

<!-- 事务管理 -->

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

<!-- 定义工作流引擎配置类 -->

<bean id="processEngineConfiguration"

class="org.activiti.spring.SpringProcessEngineConfiguration">

<!-- 配置数据源 -->

<property name="dataSource" ref="dataSource" />

<!-- 配置事务管理器 -->

<property name="transactionManager" ref="transactionManager" />

<!-- 数据库更新策略 -->

<property name="databaseSchemaUpdate" value="true"/>

</bean>
<!-- 定义工作流引擎接口 -->

<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">

<property name="processEngineConfiguration" ref="processEngineConfiguration" />

</bean>

<!-- 定义Service服务接口 -->

<bean id="repositoryService" factory-bean="processEngine"

factory-method="getRepositoryService" />

<bean id="runtimeService" factory-bean="processEngine"

factory-method="getRuntimeService" />

<bean id="taskService" factory-bean="processEngine"

factory-method="getTaskService" />

<bean id="historyService" factory-bean="processEngine"

factory-method="getHistoryService" />

<bean id="IdentityService" factory-bean="processEngine"

factory-method="getIdentityService" />

<bean id="managementService" factory-bean="processEngine"

factory-method="getManagementService" />

<bean id="formService" factory-bean="processEngine"

factory-method="getFormService" />

</beans>

从以上配置文件内容可知,activiti.context.xml配置文件也采用Spring bean配置文件格式,先定义了一个 id为processEngineConfiguration的bean对象,即Activiti默认引擎配置管理器,接着为其指定一个具体的Java类org.activiti.spring.SpringProcessEngineConfiguration,由Spring负责实例化引擎配置管理器并注入一系列配置。其与activiti.cfg.xml配置文件大同小异,但使用Spring配置风格需要注意以下4点:

 这种方式可以配置事务管理器,由Spring管理数据库事务;  必须定义工作流引擎接口ProcessEngineFactoryBean并为其设置processEngineConfiguration属性,从而创建工作流引擎;  可以定义Service接口,由工作流引擎接口引入;  使用这种方式实现工作流引擎配置需要在Spring配置文件中 引入: < import resource="activiti.context.xml"/>

使用Spring配置风格配置工作流引擎的示例代码如下:

ini 复制代码
public void createProcessEngineBySpringXmlTest() throws IOException {

//读取activiti.context.xml配置文件

ClassLoader classLoader = ReflectUtil.getClassLoader();

URL resource = classLoader.getResource("activiti.context.xml");

//实例化Spring的ApplicationContext对象

ApplicationContext applicationContext = new GenericXmlApplicationContext

(new UrlResource(resource));

//从Spring中获取ProcessEngine对象

Map<String, ProcessEngine> beansOfType =

applicationContext.getBeansOfType(ProcessEngine.class);

if ((beansOfType == null) || (beansOfType.isEmpty())) {

throw new ActivitiException("no " + ProcessEngine.class.getName() +

" defined in the application context " + resource.toString());

}

//获取第一个ProcessEngine实例对象

ProcessEngine processEngine = beansOfType.values().iterator().next();

System.out.println(processEngine);

数据库连接配置

Activiti启动时,会加载工作流引擎配置文件中的数据库连接配置连接数据库,从而实现对数据库的

操作。Activiti支持多种主流的数据库,包括H2、MySQL、Oracle、PostgreSQL、SQL Server、DB2等。

数据库连接配置 Activiti支持通过JDBC和DataSource方式配置数据库连接。 1.JDBC方式配置

一个标准的Activiti配置文件activiti.cfg.xml的内容如下:

<beans xmlns="www.springframework.org/schema/bean..."

xmlns:xsi="www.w3.org/2001/XMLSch..."

xsi:schemaLocation="www.springframework.org/schema/bean...

www.springframework.org/schema/bean...

<bean id="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

从以上配置文件内容可知,使用JDBC方式配置数据库连接时,将数据库相关配置信息写入了配置文件。 使用JDBC方式连接数据库,会用到jdbcDriver、jdbcUrl、jdbcUsername、jdbcPassword。ProcessEngineConfiguration类中有相应属性的setter()方法,可将这4个数据库属性注入该bean。

 jdbcDriver:针对特定数据库类型的驱动程序的实现。  jdbcUrl:数据库的JDBC URL。  jdbcUsername:连接数据库的用户名。  jdbcPassword:连接数据库的密码。

Activiti默认使用MyBatis数据连接池,基于提供的jdbc属性构建的数据源具有默认的MyBatis连接池设 置,可以通过以下属性调整该连接池。  jdbcMaxActiveConnections:连接池中处于激活状态的最大连接值,默认为10。  jdbcMaxIdleConnections:连接池中处于空闲状态的最大连接值。  jdbcMaxCheckoutTime:连接被取出使用的最长时间(单位为毫秒),默认为20000(20秒),超过 时间的连接会被强制回收。  jdbcMaxWaitTime:当整个连接池需要重新获取连接时,设置等待时间(单位为毫秒)。这是一个底 层配置,使连接池可以在长时间无法获得连接时打印日志状态,并重新尝试获取连接,避免在连接 池配置错误的情况下静默失败,默认为20000(20秒)。

2.DataSource方式配置

对于Activiti数据库连接配置,除了采用上面介绍的JDBC方式配置,还可以采用DataSource方式配置, 如使用DBCP、C3P0、Hikari、Tomcat连接池等配置数据库连接。这里以采用DBCP连接池配置数据库连接为 例进行说明:

xml 复制代码
<?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="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<!-- 数据库驱动名称 -->

<property name="driverClassName" value="com.mysql.jdbc.Driver"/>

<!-- 数据库地址 -->

<property name="url" value="jdbc:mysql://localhost:3306/workflow"/>

<!-- 数据库用户名 -->

<property name="username" value="root"/>

<!-- 数据库密码 -->

<property name="password" value="123456"/>
<!--activiti工作流引擎配置-->

<bean id="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

<!-- 数据源配置 -->

<property name="dataSource" ref="dataSource"/>

</bean>

</beans>

在上述数据库连接配置中,Activiti先配置了一个DBCP连接池,然后通过dataSource属性将其引入

ProcessEngineConfiguration。

数据库策略属性配置

不论使用JDBC方式还是使用DataSource方式配置数据库连接,都可以设置以下属性。

1.databaseType属性

该属性用于指定数据库类型,默认为h2。通常无须指定此属性,因为工作流引擎会在数据库连接元数据 中自动分析该属性,只有在自动检测失败的情况下才需要指定,其值可以是h2、hsql、mysql、oracle、postgresql、mssql或db2。该属性用于确定引擎使用哪种数据库的create/drop/upgrade的SQL DDL脚本(其中DDL代表data definition language,即数据定义语言),以及数据库操作的sql语句。Activiti的SQL DDL存储在activiti-6.0.0.zip的database子文件夹,或JAR文件中的org/activiti/db包内,其命名规范为activiti.{db}.{create|drop|upgrade}.{type}.sql。其中,db为支持的数据库名,type为engine、history或identity。

2.databaseSchemaUpdate属性

该属性用于设置工作流引擎启动、关闭时数据库执行的策略。该属性值可以是false、true、create-drop 或drop-create。

  •  false:默认值。设置为该值后,Activiti启动时会对比数据库表中保存的版本,如果数据库中没有表 或者版本不匹配,则抛出异常。
  •  true:设置为该值后,Activiti启动时会更新所有表,如果表不存在,则自动创建表。
  •  create-drop:设置为该值后,Activiti启动时会自动执行数据库表的创建操作,关闭时会自动执行数据 库表的删除操作。
  •  drop-create:设置为该值后,Activiti启动时会先执行数据库表的删除操作,再执行数据库表的创建操 作。与create-drop
相关推荐
海绵波波1079 分钟前
flask后端开发(1):第一个Flask项目
后端·python·flask
AI人H哥会Java3 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
凡人的AI工具箱3 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
奔跑草-3 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu
中國移动丶移不动3 小时前
Java 并发编程:原子类(Atomic Classes)核心技术的深度解析
java·后端
Q_19284999064 小时前
基于Spring Boot的旅游推荐系统
spring boot·后端·旅游
愤怒的代码5 小时前
Spring Boot对访问密钥加密解密——RSA
java·spring boot·后端
美美的海顿5 小时前
springboot基于Java的校园导航微信小程序的设计与实现
java·数据库·spring boot·后端·spring·微信小程序·毕业设计
愤怒的代码5 小时前
Spring Boot中幂等性的应用
java·spring boot·后端
xiaocaibao7775 小时前
编程语言的软件工程
开发语言·后端·golang