Flowable DMN引擎配置详解
概述
Flowable DMN引擎是Flowable项目中的决策模型与规则引擎组件,用于执行DMN(Decision Model and Notation)标准定义的决策表。本文将详细介绍如何配置Flowable DMN引擎,包括创建引擎实例、数据库配置、与流程引擎集成等内容。
创建DMN引擎实例
基础配置方式
Flowable DMN引擎可以通过XML配置文件进行配置,默认配置文件名为flowable.dmn.cfg.xml。最简单的获取DMN引擎实例的方式是使用DmnEngines工具类:
DmnEngine dmnEngine = DmnEngines.getDefaultDmnEngine()
这种方式会从classpath中查找flowable.dmn.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="dmnEngineConfiguration" class="org.flowable.dmn.engine.impl.cfg.StandaloneDmnEngineConfiguration">
<property name="jdbcUrl" value="jdbc:h2:mem:flowable;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="strictMode" value="false"/>
</bean>
</beans>
虽然使用了Spring的配置格式,但Flowable DMN并不依赖Spring环境,只是借用了Spring的依赖注入能力。
编程式配置
除了使用XML配置外,也可以通过编程方式创建配置:
DmnEngine dmnEngine = DmnEngineConfiguration.createStandaloneInMemDmnEngineConfiguration()
.setDatabaseSchemaUpdate(DmnEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
.buildDmnEngine();
配置类选择
Flowable提供了几种预定义的配置类,适用于不同环境:
- StandaloneDmnEngineConfiguration:独立运行模式,Flowable自行管理事务
- StandaloneInMemDmnEngineConfiguration:单元测试专用,使用H2内存数据库
- SpringDmnEngineConfiguration:Spring环境集成专用
与流程引擎集成
可以将DMN引擎集成到Flowable流程引擎中,实现统一管理:
<bean id="dmnEngineConfiguration" class="org.flowable.dmn.engine.impl.cfg.StandaloneDmnEngineConfiguration">
<!-- DMN引擎配置 -->
</bean>
<bean id="dmnEngineConfigurator" class="org.flowable.dmn.engine.configurator.DmnEngineConfigurator">
<property name="dmnEngineConfiguration" ref="dmnEngineConfiguration" />
</bean>
<bean id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="configurators">
<list>
<ref bean="dmnEngineConfigurator" />
</list>
</property>
<!-- 流程引擎其他配置 -->
</bean>
集成后可以通过流程引擎的部署API同时部署BPMN和DMN资源。
数据库配置
JDBC直接配置
<property name="jdbcUrl" value="jdbc:h2:mem:flowable_dmn;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
连接池参数(基于MyBatis连接池):
- jdbcMaxActiveConnections:最大活动连接数(默认10)
- jdbcMaxIdleConnections:最大空闲连接数
- jdbcMaxCheckoutTime:连接最大检出时间(毫秒,默认20000)
- jdbcMaxWaitTime:最大等待时间(毫秒,默认20000)
使用DataSource
推荐使用专业连接池(如HikariCP、Tomcat JDBC等):
<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/flowable_dmn" />
<property name="username" value="flowable" />
<property name="password" value="flowable" />
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="dmnEngineConfiguration" class="org.flowable.dmn.engine.impl.cfg.StandaloneDmnEngineConfiguration">
<property name="dataSource" ref="dataSource" />
</bean>
通用配置参数
- databaseType:数据库类型(h2|mysql|oracle|postgres|db2|mssql),通常自动检测
- databaseSchemaUpdate:数据库模式更新策略
- false:检查版本,不匹配则抛出异常(默认)
- true:检查并自动更新模式
- create-drop:创建模式并在引擎关闭时删除
JNDI数据源配置
在Servlet容器中使用JNDI数据源可以实现更灵活的配置管理。以Tomcat为例:
- 在
$CATALINA_BASE/conf/Catalina/localhost/flowable-app.xml中配置:
<Context antiJARLocking="true" path="/flowable-app">
<Resource auth="Container"
name="jdbc/flowableDB"
type="javax.sql.DataSource"
description="JDBC DataSource"
url="jdbc:mysql://localhost:3306/flowable"
driverClassName="com.mysql.jdbc.Driver"
username="sa"
password=""
defaultAutoCommit="false"
initialSize="5"
maxWait="5000"
maxActive="120"
maxIdle="5"/>
</Context>
- 在配置文件中指定JNDI名称:
spring.datasource.jndi-name=jdbc/flowableDB
datasource.jndi.resourceRef=true
自定义属性
可以在配置中使用系统属性:
<property name="jdbcUrl" value="${jdbc.url:jdbc:h2:mem:flowable;DB_CLOSE_DELAY=1000}" />
也可以通过PropertyPlaceholderConfigurer指定属性文件位置:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:/opt/conf/flowable.properties" />
</bean>
支持的数据库
| 数据库类型 | JDBC URL示例 | 说明 |
|---|---|---|
| h2 | jdbc:h2:tcp://localhost/flowable_dmn | 默认数据库 |
| mysql | jdbc:mysql://localhost:3306/flowable_dmn?autoReconnect=true | 需mysql-connector-java驱动 |
| oracle | jdbc:oracle:thin:@localhost:1521:xe | |
| postgres | jdbc:postgresql://localhost:5432/flowable_dmn | |
| db2 | jdbc:db2://localhost:50000/flowable_dmn | |
| mssql | jdbc:sqlserver://localhost:1433;databaseName=flowable_dmn | 需Microsoft JDBC Driver或JTDS驱动 |
数据库表结构
Flowable DMN使用Liquibase管理数据库模式变更。主要表包括:
- ACT_DMN_DATABASECHANGELOG:Liquibase变更记录
- ACT_DMN_DATABASECHANGELOGLOCK:Liquibase锁表
- ACT_DMN_DECISION_TABLE:决策表元数据
- ACT_DMN_DEPLOYMENT:部署元数据
- ACT_DMN_DEPLOYMENT_RESOURCE:部署资源
数据库升级
升级前务必备份数据库。Flowable会在引擎启动时检查版本,如果发现版本不匹配会抛出异常。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



