? org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration: 单独运行的流程引擎。Activiti会自己处理事务。 默认,数据库只在引擎启动时检测 (如果没有Activiti的表或者表结构不正确就会抛出异常)。
? org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration: 单元测试时的辅助类。Activiti会自己控制事务。 默认使用H2内存数据库。数据库表会在引擎启动时创建,关闭时删除。 使用它时,不需要其他配置(除非使用job执行器或邮件功能)。
? org.activiti.spring.SpringProcessEngineConfiguration: 在Spring环境下使用流程引擎。 参考Spring集成章节。
? org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration: 单独运行流程引擎,并使用JTA事务。
数据库配置
Activiti可能使用两种方式配置数据库。 第一种方式是定义数据库配置参数:
? ? ? ?
jdbcUrl: 数据库的JDBC URL。
jdbcDriver: 对应不同数据库类型的驱动。 jdbcUsername: 连接数据库的用户名。 jdbcPassword: 连接数据库的密码。
基于JDBC参数配置的数据库连接 会使用默认的MyBatis连接池。 下面的参数可以用来配置连接池(来自MyBatis参数):
? ? ?
jdbcMaxActiveConnections: 连接池中处于被使用状态的连接的最大值。默认为10。 jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最大值。
jdbcMaxCheckoutTime: 连接被取出使用的最长时间,超过时间会被强制回收。 默认为20000(20秒)。
? jdbcMaxWaitTime: 这是一个底层配置,让连接池可以在长时间无法获得连接时, 打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。 默认为20000(20秒)。
示例数据库配置:
无论你使用JDBC还是DataSource的方式,都可以设置下面的配置: ? databaseType: 一般不用设置,因为可以自动通过数据库连接的元数据获取。 只有自动检测失败时才需要设置。 可能的值有:{h2, mysql, oracle, postgres, mssql, db2}。 如果没使用默认的H2数据库就必须设置这项。 这个配置会决定使用哪些创建/删除脚本和查询语句。 参考支持数据库章节 了解支持哪些类型。 ? databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表。 o false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异 常。 o true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。 o create-drop: 构建流程引擎时创建数据库表, 关闭流程引擎时删除这些表。 支持的数据库 下面列出Activiti使用的数据库类型(大小写敏感)。 Table 3.1. 支持的数据库 Activiti数据库类型 h2 测试版本 1.3.168 JDBC URL实例 jdbc:h2:tcp://localhost/activiti 备注 默认配置的数据库 使用mysql-mysql 5.1.21 jdbc:mysql://localhost:3306/activiti?autoReconnect=true connector-java驱动测试 oracle postgres db2 11.2.0.1.0 8.1 DB2 10.1 using db2jcc4 2008 using sqljdbc4 jdbc:oracle:thin:@localhost:1521:xe jdbc:postgresql://localhost:5432/activiti jdbc:db2://localhost:50000/activiti mssql jdbc:sqlserver://localhost:1433/activiti 创建数据库表 下面是创建数据库表最简单的办法: ? ? ? 把activiti-engine的jar放到classpath下 添加对应的数据库驱动 把Activiti配置文件 (activiti.cfg.xml) 放到 classpath下, 指向你的数据库(参考数据库配置章节) ? 执行 DbSchemaCreate 类的main方法 然而,只有数据库管理员可以执行DDL语句。 SQL DDL语句可以从Activiti下载页或Activiti发布目录里找到,在database子目录下。 脚本也包含在引擎的jar中(activiti-engine-x.jar), 在org/activiti/db/create包下(drop目录里是删除语句)。 SQL文件的命名方式如下 activiti.{db}.{create|drop}.{type}.sql 其中 db 是 支持的数据库, type 是 ? ? engine: 引擎执行的表。必须。 identity: 包含用户,群组,用户与组之间的关系的表。 这些表是可选的,只有使用引擎自带的默认身份管理时才需要。 ? history: 包含历史和审计信息的表。可选的:历史级别设为none时不会使用。 注意这也会引用一些需要把数据保存到历史表中的功能(比如任务的评论)。 理解数据库表的命名 Activiti的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ? ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。 ? ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。 ? ? ? ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。 ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。 ACT_GE_*: 通用数据, 用于不同场景下。 数据库升级 在执行更新之前要先备份数据库 (使用数据库的备份功能) 默认,每次构建流程引擎时都会还行版本检测。 这一版都在应用启动或Activiti webapp启动时发生。 如果Activiti发现数据库表的版本与依赖库的版本不同, 就会抛出异常。 要升级,你要把下面的配置 放到activiti.cfg.xml配置文件里: 也可以执行更新升级DDL语句。 也可以执行数据库脚本,可以在Activiti下载页找到。 启用Job执行器 JobExecutor是管理一系列线程的组件,可以触发定时器(也包含后续的异步消息)。 在单元测试场 景下,很难使用多线程。因此API允许查询(ManagementService.createJobQuery)和执行job (ManagementService.executeJob),所以job可以在单元测试中控制。 要避免与job执行器冲突,可以关闭它。 默认,JobExecutor在流程引擎启动时就会激活。 如果不想在流程引擎启动后自动激活 JobExecutor,可以设置 可以选择配置邮件服务器。Activiti支持在业务流程中发送邮件。 想真正的发送一个email,必须配置一个真实的SMTP邮件服务器。 参考e-mail任务。 配置历史 可以选择定制历史存储的配置。你可以通过配置影响引擎的历史功能。 参考历史配置。 默认,activiti.cfg.xml和你自己的Spring配置文件中所有bean 都可以在表达式和脚本中使用。 如果你想限制配置文件中的bean的可见性, 可以配置流程引擎配置的beans配置。 ProcessEngineConfiguration的beans是一个map。当你指定了这个参数, 只有包含这个 map中的bean可以在表达式和脚本中使用。 通过在map中指定的名称来决定暴露的bean。 配置部署缓存 所有流程定义都被缓存了(解析之后)避免每次使用前都要访问数据库, 因为流程定义数据是不会改变的。 默认,不会限制这个缓存。如果想限制流程定义缓存,可以添加如下配置