德玛西亚之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 type Example JDBC URL Notes
h2 jdbc:h2:tcp://localhost/activiti Default configured database
mysql jdbc:mysql://localhost:3306/activiti?autoReconnect=true Tested using mysql-connector-java database driver
oracle jdbc:oracle:thin:@localhost:1521:xe
postgres jdbc:postgresql://localhost:5432/activiti
db2 jdbc:db2://localhost:50000/activiti
mssql jdbc: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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://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:使用该服务,可以不需要重新部署流程模型,就可以实现对流程模型的部分修改。

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


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

  1. 德玛西亚之WorkFlow(五)流程引擎创建

    德玛西亚之WorkFlow(五)流程引擎创建 在之前了解了 Activiti 的配置和数据库各个表的功能含义.现在我们需要根据这些配置生成工作流引擎.Activiti 提供了多种创建流程引擎的方式供研 ...

  2. 德玛西亚之WorkFlow(七)流程的发布与定义

    德玛西亚之WorkFlow(七)流程的发布与定义 流程的存储和部署主要涉及的服务组件是RepositoryService.RepositoryService 主要用于对 Activiti 中的流程存储 ...

  3. 德玛西亚之WorkFlow(四)数据库设计

    德玛西亚之WorkFlow(四)数据库设计 在流程的产生.执行及结束等周期,都会产生各种与流程相关的数据, Activiti 提供了一整套数据表来保存这些数据. Activiti 流程引擎的数据表分 ...

  4. 德玛西亚之WorkFlow(二)程序演示

    德玛西亚之WorkFlow(二)程序演示 1 程序的基本配置 1.1 maven依赖的配置 <properties><project.build.sourceEncoding> ...

  5. 德玛西亚之WorkFlow(一)工作流介绍

    德玛西亚之WorkFlow(一)工作流介绍 1 什么是工作流 工作流(WorkFlow),就是将一项多人或者多任务的工作按照固定的顺序进行逐项操作,直至此工作结束.举个简单的例子:多个人协同做饭,首先 ...

  6. 德玛西亚之WorkFlow(六)用户与用户组

    德玛西亚之WorkFlow(六)用户与用户组 1 用户组的操作 public void createGroup() {Group newGroup1 = identityService.newGrou ...

  7. [NC15034]德玛西亚万岁

    状压dp 第一次写状压dp的题目,可能是因为这种类型的比较难吧,所以是第一次做到. 题解: 我们可以用二进制来描述方格,1表示有德玛西亚,0表示没有. 样例1中第一行的三个方格都可以站人 一共有五种情 ...

  8. 牛客每日练习----德玛西亚万岁,求最值,小牛再战

    我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力.                                      ----喻言 链接:http ...

  9. 德玛西亚服务器维护,德玛西亚大区被玩家吐槽是最贵的服务器,游戏体验没法玩!...

    原标题:德玛西亚大区被玩家吐槽是最贵的服务器,游戏体验没法玩! 大家好,我是你们的租号玩小姐姐! 在英雄联盟刚开始的时候,整个游戏还只有三个大区,电一艾欧尼亚.网一比尔吉沃特和网二德玛西亚.一直都有北 ...

最新文章

  1. HTML5培训教程:HTML5基础介绍
  2. CRM User Status profile中Business Transaction字段的用途 1
  3. 【五线谱】变音记号 ( 升号 # | 降号 b | 重升号 x | 重降号 bb )
  4. HashSet/HashMap 存取值的过程
  5. 大约C++ const 全面总结
  6. linux使用root操作文件,以root用户登录Linux系统,当前目录是/root,要求完成如下操作和功...
  7. java 悬浮提示框_表格(悬浮框提示)
  8. 前端:实现div等块元素添加X轴滚动显示(Y轴不滚动)
  9. Spring Cloud源码分析(四)Zuul:核心过滤器
  10. 华为彭松:基于C.A.F模型构建联接竞争力,创造新增长
  11. HEVC码流简单分析
  12. 您觉得目前网页最小字体应该多大呢?
  13. Android Activity生命周期以及LoCat的使用
  14. win10系统鼠标右键一直转圈的两种解决方法
  15. 计算机基础:13、计算机CPU--运算器
  16. 解决IDEA输入ctrl+空格,和输入法冲突的问题
  17. nginx openresty waf动态黑名单 白名单 、centos 、windows下部署
  18. ECL、LVDS和CML电平
  19. 扩充虚拟机文件系统的磁盘空间
  20. threeJS中4*4矩阵实现平移和旋转的原理

热门文章

  1. 用户态的内存泄漏定位,memwatch的使用
  2. 王者客服信息服务器,王者荣耀客服反馈在哪 王者荣耀客服反馈入口位置介绍...
  3. 出行大数据绘制的“城市星云图”是怎样的?我们还总结出了5种城市结构
  4. 别好奇了,excel 绘制闪到发光的三维地图真的很简单!
  5. html跳转代码 搜索引擎,HTML JS跳转代码:蜘蛛正常访问 用户访问直接跳转
  6. 免费微信多开软件(PC端) 微博领会员一个月
  7. 分享53戏源代码总有一个是你想要的(亲测每一个均可用)
  8. 走马灯 (滚动字幕效果)
  9. creator发布oppo小游戏
  10. 纯软件公司的先驱 甲骨文公司(一)——硅谷老兵新传