德玛西亚之WorkFlow(三)流程引擎配置与服务组件

本文详细介绍了Activiti工作流引擎的配置与服务组件,包括如何使用Spring容器进行配置,数据库配置选项,支持的数据库类型,以及如何集成Spring事务管理。同时,文章还列举了各种服务组件的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

德玛西亚之WorkFlow(三)流程引擎配置与服务组件

1 配置文件

1.1 默认配置文件

工作流引擎默认会加载ClassPath路径下的 activiti.cfg.xml 文件。这样并不实用使用 spring 容器的配置。最简单的方式生成 ProcessEngine 就是使用 org.activiti.engine.ProcessEngines 生成:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine()

这将在ClassPaht 下查找 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 id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
    <property name="jdbcDriver" value="org.h2.Driver" />
    <property name="jdbcUsername" value="sa" />
    <property name="jdbcPassword" value="" />
    <property name="databaseSchemaUpdate" value="true" />
    <property name="asyncExecutorActivate" value="false" />
    <property name="mailServerHost" value="mail.my-corp.com" />
    <property name="mailServerPort" value="5025" />
  </bean>
</beans>

请注意,配置XML实际上是一个Spring配置。**这并不意味着Activiti只能在Spring环境中使用!**我们只是在内部利用Spring的解析和依赖注入功能来构建引擎。

ProcessEngineConfiguration对象也可以使用配置文件以编程方式创建。也可以使用不同的bean id。

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();

如果需要,所有这些ProcessEngineConfiguration.createXXX()方法都返回ProcessEngineConfiguration可以进一步调整的方法。调用buildProcessEngine()操作后,ProcessEngine创建一个:

ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()
  .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
  .setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
  .setAsyncExecutorActivate(false)
  .buildProcessEngine();
1.2 ProcessEngineConfiguration bean

activiti.cfg.xml必须包含有ID的Bean 'processEngineConfiguration'

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

然后使用这个bean来构造ProcessEngine。有多个类可用于定义processEngineConfiguration。这些类表示不同的环境,并相应地设置默认值。选择匹配(最多)环境的类是最佳实践,以最小化配置引擎所需的属性数。目前可以使用以下类(将来的版本中将会有更多类):

  • org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration:流程引擎以独立方式使用。Activiti将负责交易。默认情况下,仅在引擎引导时检查数据库(如果没有Activiti架构或架构版本不正确,则抛出异常)。
  • org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration:这是一个用于单元测试的便利类。Activiti将负责交易。默认情况下使用H2内存数据库。引擎启动和关闭时将创建和删除数据库。使用此功能时,可能不需要其他配置(例如,使用作业执行程序或邮件功能时除外)。
  • org.activiti.spring.SpringProcessEngineConfiguration:在Spring环境中使用流程引擎时使用。有关更多信息,请参阅Spring集成部分
  • org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration:在引擎以独立模式运行时使用JTA事务。
1.3 数据库配置

有两种方法可以配置Activiti引擎将使用的数据库。第一个选项是定义数据库的JDBC属性:

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

基于提供的JDBC属性构造的数据源将具有默认的MyBatis连接池设置。可以选择设置以下属性来调整该连接池(取自MyBatis文档):

  • jdbcMaxActiveConnections:任何时候连接池最多可以包含的活动连接数。默认值为10。
  • jdbcMaxIdleConnections:任何时候连接池最多可以包含的空闲连接数。
  • jdbcMaxCheckoutTime:在强制返回连接之前,可以从连接池中检出连接的时间量(以毫秒为单位)。默认值为20000(20秒)。
  • jdbcMaxWaitTime:这是一个低级别设置,它为池提供了一个机会来打印日志状态,并在它花费异常时间的情况下重新尝试获取连接(以避免在池配置错误时永远无声地失败)默认值是20000(20秒)。

示例数据库配置:

<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />

使用数据库连接池(例如DBCP,C3P0,Hikari,Tomcat连接池等):

<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/activiti" />
  <property name="username" value="activiti" />
  <property name="password" value="activiti" />
  <property name="defaultAutoCommit" value="false" />
</bean>
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

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

请注意,Activiti不附带允许定义此类数据源的库。所以你必须确保库在你的类路径上。

无论您使用的是JDBC还是数据源方法,都可以设置以下属性:

  • databaseType:通常不需要指定此属性,因为它是从数据库连接元数据中自动分析的。只应在自动检测失败的情况下指定。可能的值:{h2,mysql,oracle,postgres,mssql,db2}。此设置将确定将使用哪些创建/删除脚本和查询。请参阅支持的数据库部分用于哪些类型支持的概述。
  • databaseSchemaUpdate:允许设置策略以在流程引擎启动和关闭时处理数据库模式。
    • false (默认值):在创建流程引擎时检查库模式的版本,如果版本不匹配则抛出异常。
    • true:构建流程引擎时,将执行检查,并在必要时执行架构更新。如果架构不存在,则创建它。
    • create-drop:在创建流程引擎时创建架构,并在关闭流程引擎时删除架构。
      其他属性的配置

除前面介绍的属性外, Activiti 还提供了其他的属性配置,这些属性包括邮件服务、 历史数据配置、任务调度器等 对于某些属性,使用者可以不进行指定,使用 Activiti 提供的默认值即可,但是如果需要定制更个性化的流程引擎,还是需要知道这些属性的作用

history 配置

在流程执行的过程中,会产生一些流程相关的数据,例如流程实例、流程任务和流程参数等,随着流程的进行与结束,这些数据将会被从流程数据表中删除,为了能保存这些数据,Activiti 提供了历史数据表,可以将这些数据保存到历史数据表中。对于这些历史数据,保存到何种粒度, Activiti 提供了 history 属性对其进行配置 hi即可属性有点像 log4j 的日志输出级别,该属性有以下四个值
none 不保存任何的历史数据 因此,在流程执行过程中,这是最高效的
activity 级别高于 none ,保存流程实例与流程行为,其他数据不保存
audit: activity 级别会保存的数据外,还会保存全部的流程任务及其属性数据 audit 为 history 的默认值。
full :保存历史数据的最高级别,除了会保存 audit 级别的数据外,还会保存其他全部
流程相关的细节数据,包括 些流程参数等。

asyncExecutorActivate 配置

as cExecutorActivate 属性主要用于配置异步执行器是否启动, true 则表示 Activiti 在创建
流程引擎时,需要启动异步执行器,该属性默认值为也lse 。异步执行器启动后,会启动定时
器扫描并执行各种工作,如果查找到符合执行条件的工作,则会启动 条线程并交由线程池去
执行。

邮件服务器配置

Activiti 支持邮件服务,当流程执行到某一个节点时, Activiti 会根据流程文件配置 (EmailTask) ,发送邮件到相应的邮箱 以下为 ProcessEngineConfiguration 中提供的邮件服务器配置项。

  • mailServerHost:邮件服务器地址,非必填,默认值为 localhost。
  • mailServerHost : SMTP 发送邮件服务器端口,默认值为 250
  • mailServerDefaultFrom :非必填,发送人的邮箱地址,默认值为 activiti@activiti.org
  • mailServerUsemame :邮箱登录用户名。
  • mailServerPassword :邮箱登录密码。
  • mailServerUseSSL :是否使用 SSL 协议通信,默认为 false。
  • mailServerUseTLS :是否使用 TLS 协议通信,默认为 false。
1.4 支持的数据库

下面列出了Activiti用于引用数据库的类型(区分大小写!)。

Activiti database typeExample JDBC URLNotes
h2jdbc:h2:tcp://localhost/activitiDefault configured database
mysqljdbc:mysql://localhost:3306/activiti?autoReconnect=trueTested using mysql-connector-java database driver
oraclejdbc:oracle:thin:@localhost:1521:xe
postgresjdbc:postgresql://localhost:5432/activiti
db2jdbc:db2://localhost:50000/activiti
mssqljdbc:sqlserver://localhost:1433;databaseName=activiti (jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver) OR jdbc:jtds:sqlserver://localhost:1433/activiti (jdbc.driver=net.sourceforge.jtds.jdbc.Driver)Tested using Microsoft JDBC Driver 4.0 (sqljdbc4.jar) and JTDS Driver
1.5 Spring 集成

虽然你绝对可以使用没有Spring的Activiti,但我们提供了一些非常好的集成功能。

1.5.1 ProcessEngineFactoryBean

ProcessEngine可配置为一个普通的Spring bean。集成的起点是类org.activiti.spring.ProcessEngineFactoryBean。该bean采用流程引擎配置并创建流程引擎。这意味着Spring的属性的创建和配置与配置部分中记录的相同。对于Spring集成,配置和引擎bean将如下所示:

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
    ...
</bean>

<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
  <property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>

请注意,processEngineConfigurationbean现在使用org.activiti.spring.SpringProcessEngineConfiguration该类。

1.5.2 Transactions (事务)

我们将逐步解释在Spring分发示例中找到的SpringTransactionIntegration测试。下面是我们在本例中使用的Spring配置文件(您可以在SpringTransactionIntegrationTest Context.xml中找到它)。下面显示的部分包含数据源、TransactionManager、ProcessEngine和Activiti引擎服务。

当将数据源传递给SpringProcessEngineConfiguration(使用属性“datasource”)时,Activiti在内部使用org.springframework.jdbc.datasource.TransactionAwaredataSourceCroxy,它包装传递的数据源。这样做是为了确保从数据源和Spring事务中检索到的SQL连接能够良好地协同工作。这意味着,在Spring配置中不再需要自己代理数据源,尽管它仍然允许将TransactionWaredataSource代理传递到SpringProcessEngineConfiguration中。在这种情况下,不会发生额外的包装。

确保在自己在Spring配置中声明TransactionWaredataSourceCroxy时,不会将其用于已经知道Spring事务的资源(例如,DataSourceTransactionManager和JPatransactionManager需要未代理的数据源)。

<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 id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
    <property name="driverClass" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
    <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" />
    <property name="asyncExecutorActivate" value="false" />
  </bean>

  <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  </bean>

  <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="managementService" factory-bean="processEngine" factory-method="getManagementService" />

...

这个Spring配置文件的其余部分包含了bean和我们将在这个特定示例中使用的配置:

<beans>
  ...
  <tx:annotation-driven transaction-manager="transactionManager"/>

  <bean id="userBean" class="org.activiti.spring.test.UserBean">
    <property name="runtimeService" ref="runtimeService" />
  </bean>

  <bean id="printer" class="org.activiti.spring.test.Printer" />

</beans>

2 服务组件

RepositoryService:提供一系列管理流程定义和流程部署的API。
RuntimeService:在流程运行时对流程实例进行管理与控制。
TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务分本任务等。
IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户以及它们之间的关系。
ManagementService:提供对流程引擎进行管理和维护的服务。
HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
DynamicBpmnService:使用该服务,可以不需要重新部署流程模型,就可以实现对流程模型的部分修改。

爷儿您要是看的乐,打个赏也让姑娘乐一乐

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝色红宝石

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值