数据源配置
Camunda数据库配置方式主要包括2各部分。首先是定义数据库的 JDBC 属性,Camunda引擎在内部使用 Apache MyBatis 进行持久化。
- jdbcUrl:数据库的JDBC URL。
- jdbcDriver:特定数据库类型的驱动程序的实现。
- jdbcUsername:连接数据库的用户名。
- jdbcPassword:连接数据库的密码。
基于提供的 JDBC 属性构建的数据源将具有默认的 MyBatis 连接池设置。可以选择设置以下属性来调整该连接池:
- jdbcMaxActiveConnections:连接池在任何给定时间可以包含的最大活动连接数。默认值为 10。
- jdbcMaxIdleConnections:连接池在任何给定时间可以包含的最大空闲连接数。
- jdbcMaxCheckoutTime:在强制返回连接之前,可以从连接池中“签出”连接的时间量(以毫秒为单位)。默认值为 20000(20 秒)。
- jdbcMaxWaitTime:这是一个低级别的设置,它使池有机会打印日志状态,并在需要异常长时间的情况下重新尝试获取连接(以避免在池配置错误时永远以静默方式失败)。默认值为 20000(20 秒)。
- jdbcStatementTimeout:JDBC 驱动程序等待数据库响应的时间(以秒为单位)。默认值为 null,表示没有超时。H2 数据库不支持此设置。
其次,另一种配置是jdbcBatchProcessing。用于设置在向数据库发送SQL语句时是否必须使用批处理模式。关闭时,语句将逐个执行,该参数值默认是。批处理存在一些已知问题:批处理不适用于早于 12 的 Oracle 版本;在 MariaDB 和 DB2 上使用批处理时,jdbcStatementTimeout 将被忽略。
下面是一些常见的数据库JDBC链接示例:
- H2: jdbc:h2:tcp://localhost/camunda
- MySQL:jdbc:mysql://localhost:3306/camunda?autoReconnect=true&sendFractionalSeconds=false
- Oracle: jdbc:oracle:thin:@localhost:1521:xe
- PostgreSQL: jdbc:postgresql://localhost:5432/camunda
- DB2: jdbc:db2://localhost:50000/camunda
- MSSQL: jdbc:sqlserver://localhost:1433/camunda
- MariaDB: jdbc:mariadb://localhost:3306/camunda
数据库Schema配置
对于数据库Schema配置,还有以下可选配置项:
- databaseType:通常不需要指定此属性,因为它是根据数据库连接元数据自动分析的。仅当自动检测失败时才应指定。可能的值:{h2, mysql, oracle, postgres, mssql, db2, mariadb},详情可参照前文camunda支持的数据库,或参考官方文档。此设置将确定将使用哪些创建/删除脚本和查询。
- databaseSchemaUpdate:允许设置策略,以在流程引擎启动和关闭时处理数据库Schema。
- true(默认值):在构建流程引擎时,将检查数据库中是否存在 Camunda表。如果表不存在,则会创建它们。必须确保数据库Schema的版本与流程引擎支持的数据库library的版本匹配。
- false:不执行任何检查,并假定数据库中存在Camunda表。
- create-drop:在创建流程引擎时创建数据库Schema,在关闭流程引擎时删除数据库Schema。
隔离级别
大多数数据库管理系统都提供四种不同的隔离级别来设置。例如,ANSI/USO SQL 定义的级别为(从低隔离到高隔离):
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READS
- SERIALIZABLE
Camunda所需的隔离级别是 READ COMMITTED,根据数据库系统的不同,该级别的名称可能不同。已知将级别设置为REPEATABLE READS会导致死锁,因此在更改隔离级别时需要小心。
关于MySQL数据库的配置说明
此处对于使用MYSQL作为Camunda数据库的相关配置与注意事项进行说明。其他数据库的情况,请参考官方文档。
禁止为日期/时间值发送毫秒:Camunda引擎的MySQL 数据库架构不支持列类型TIMESTAMP和DATETIME 的毫秒精度:即,要存储的值四舍五入到下一秒或上一秒,例如,2021-01-01 15:00:46.731 四舍五入为 2021-01-01 15:00:47。将日期/时间值作为任何SQL语句的一部分发送到数据库时,MySQL JDBC驱动(版本>= 5.1.23)会发送毫秒值。为确保流程引擎在发送日期/时间值时行为正确,需确保MySQL JDBC驱动程序更新到版本>= 5.1.37。也可以通过在JDBC 连接URL中设置 sendFractionalSeconds=false 来避免在这些版本中向 MySQL 服务器发送毫秒,详情可参阅MYSQL官方文档。
可选的性能配置
为了执行透明访问检查,任务查询将联接授权表 (ACT_RU_AUTHORIZATION)。对于任何类型的与流程相关的筛选器,它都会联接流程定义表 (ACT_RE_PROCDEF)。默认情况下,查询对这些操作使用左联接。如果未使用 CMMN 和独立任务(既不与 BPMN 流程相关,也不与 CMMN 案例相关的任务),那么可以将引擎配置标志 cmmnEnabled 和 standaloneTasksEnabled 设置为 false。然后,左联接将替换为内部联接,这些联接在某些数据库上表现更好。有关这些设置的详细信息,请参阅配置属性参考。