Flowable引擎与Spring框架集成指南
概述
Flowable作为一款强大的开源业务流程管理(BPM)引擎,提供了与Spring框架的深度集成能力。本文将详细介绍如何在Spring环境中配置和使用Flowable CMMN引擎,帮助开发者快速实现业务案例管理。
Spring集成核心组件
CmmnEngineFactoryBean
CmmnEngineFactoryBean
是Spring集成的核心类,它允许将CMMN引擎配置为标准的Spring bean。配置示例如下:
<bean id="cmmnEngineConfiguration" class="org.flowable.cmmn.spring.SpringCmmnEngineConfiguration">
<!-- 配置项 -->
</bean>
<bean id="cmmnEngine" class="org.flowable.cmmn.spring.CmmnEngineFactoryBean">
<property name="cmmnEngineConfiguration" ref="cmmnEngineConfiguration" />
</bean>
注意这里使用的是SpringCmmnEngineConfiguration
类,这是专门为Spring环境提供的配置类。
完整Spring配置示例
下面是一个完整的Spring配置示例,包含数据源、事务管理器和Flowable服务:
<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="...">
<!-- 数据源配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:flowable;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>
<!-- Flowable CMMN引擎配置 -->
<bean id="cmmnEngineConfiguration" class="org.flowable.cmmn.spring.SpringCmmnEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
<!-- CMMN引擎 -->
<bean id="cmmnEngine" class="org.flowable.cmmn.spring.CmmnEngineFactoryBean">
<property name="cmmnEngineConfiguration" ref="cmmnEngineConfiguration" />
</bean>
<!-- Flowable服务 -->
<bean id="cmmnRepositoryService" factory-bean="cmmnEngine" factory-method="getCmmnRepositoryService" />
<bean id="cmmnRuntimeService" factory-bean="cmmnEngine" factory-method="getCmmnRuntimeService" />
<bean id="cmmnTaskService" factory-bean="cmmnEngine" factory-method="getCmmnTaskService" />
<bean id="cmmnHistoryService" factory-bean="cmmnEngine" factory-method="getCmmnHistoryService" />
<bean id="cmmnManagementService" factory-bean="cmmnEngine" factory-method="getCmmnManagementService" />
</beans>
重要技术细节
数据源处理
当将数据源传递给SpringCmmnEngineConfiguration
时,Flowable会在内部使用TransactionAwareDataSourceProxy
包装传递的数据源。这确保了从数据源获取的SQL连接与Spring事务能够良好协作。
重要提示:如果自行在Spring配置中声明TransactionAwareDataSourceProxy
,请确保不要将其用于已经支持Spring事务的资源(如DataSourceTransactionManager
需要未代理的数据源)。
Spring表达式支持
在CMMN流程中使用表达式时,默认情况下可以访问所有Spring bean。可以通过配置限制可访问的bean:
<bean id="cmmnEngineConfiguration" class="org.flowable.cmmn.spring.SpringCmmnEngineConfiguration">
...
<property name="beans">
<map>
<entry key="printer" value-ref="printer" />
</map>
</property>
</bean>
在CMMN定义中,可以这样使用表达式:
<task id="serviceTask" flowable:type="java"
flowable:expression="${printer.printMessage(var1)}"
flowable:resultVariableName="customResponse" />
自动资源部署
Spring集成提供了自动部署资源的功能:
<bean id="cmmnEngineConfiguration" class="org.flowable.cmmn.spring.SpringCmmnEngineConfiguration">
...
<property name="deploymentResources"
value="classpath*:/org/flowable/cmmn/spring/test/autodeployment/autodeploy.*.cmmn" />
</bean>
支持三种部署模式:
default
:所有资源分组为单个部署(默认)single-resource
:每个资源单独部署resource-parent-folder
:按父文件夹分组部署
单元测试支持
Flowable提供了与Spring测试框架的集成支持:
JUnit 5测试示例
@ExtendWith(FlowableCmmnSpringExtension.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = TestConfiguration.class)
class MyBusinessCaseTest {
@Autowired
private CmmnRepositoryService cmmnRepositoryService;
@Test
@CmmnDeployment
public void simpleCaseTest() {
// 测试逻辑
}
}
JUnit 4测试示例
public class MyBusinessCaseTest {
@Rule
public FlowableCmmnRule cmmnRule = new FlowableCmmnRule("...");
@Test
public void simpleCaseTest() {
// 测试逻辑
}
}
最佳实践建议
- 环境隔离:开发、测试和生产环境应使用不同的数据库配置
- 资源管理:对于大型项目,建议使用
single-resource
部署模式 - 事务控制:复杂业务逻辑应考虑使用Spring的声明式事务管理
- 性能优化:在高并发场景下,合理配置连接池和事务隔离级别
通过本文的介绍,开发者可以全面了解Flowable CMMN引擎与Spring框架的集成方式,从而在实际项目中高效地实现业务案例管理功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考