Flowable与Spring集成

ProcessEngineFactoryBean

对于Spring集成,配置和引擎bean将如下所示:


    ...



  

交易

  1. 将DataSource传递给SpringProcessEngineConfiguration
    • Flowable使用org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy内部,它包装传递的DataSource
      • 目的:确保从DataSource和Spring事务中检索到的SQL连接能够很好地协同工作(意味着它不再需要代理的数据源自己在Spring的配)
      • 确保在TransactionAwareDataSourceProxy自己声明Spring配置时,不要将它用于已经知道Spring事务的资源(例如,DataSourceTransactionManager和JPATransactionManager需要未代理的dataSource)


  
    
    
    
    
  

  
    
  

  
    
    
    
    
  

  
    
  

  
  
  
  
  

...

  ...
  

  
    
  

  


  1. 使用Spring支持的任何方式创建应用程序上下文
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
    "org/flowable/examples/spring/SpringTransactionIntegrationTest-context.xml");
  1. 使用repositoryService来部署这样的进程
RepositoryService repositoryService =
  (RepositoryService) applicationContext.getBean("repositoryService");
String deploymentId = repositoryService
  .createDeployment()
  .addClasspathResource("org/flowable/spring/test/hello.bpmn20.xml")
  .deploy()
  .getId();

表达式

  1. 使用ProcessEngineFactoryBean时,BPMN进程中的所有表达式默认情况下也会看到所有Spring bean
  2. 要完全暴露NO bean,只需在SpringProcessEngineConfiguration上将空列表作为beans属性传递。如果未设置beans属性,则上下文中的所有Spring bean都可用。

  ...
  
    
      
    
  



3.在表达式中使用公开的bean:例如,SpringTransactionIntegrationTest hello.bpmn20.xml显示如何使用UEL方法表达式调用Spring bean上的方法



  

    
    

    
    

    

  


自动资源部署

  1. 在流程引擎配置中,您可以指定一组资源。创建流程引擎后,将扫描和部署所有这些资源
    • 有过滤可以防止重复部署。仅当资源实际更改时,才会将新部署部署到Flowable DB

  ...
  



  

  • 默认情况下,上面的配置会将与过滤器匹配的所有资源分组到Flowable引擎的单个部署中
    • 这些资源中只有一个流程定义发生了变化,则整个部署将被视为新部署
  1. 自定义部署的确定方式
  • 在SpringProcessEngineConfiguration中指定其他属性deploymentMode(定义从与筛选器匹配的资源集确定部署的方式)
    • default:将所有资源分组到单个部署中,并对该部署应用重复筛选
    • single-resource:为每个单独的资源创建单独的部署,并对该部署应用重复过滤。这是用于单独部署每个流程定义的值,如果已更改,则仅创建新的流程定义版本
    • resource-parent-folder:为共享同一父文件夹的资源创建单独的部署,并对该部署应用重复筛选。此值可用于为大多数资源创建单独的部署,但仍可以通过将它们放在共享文件夹中来对其进行分组

  ...
  
  

  • 创建一个子类SpringProcessEngineConfiguration并覆盖该getAutoDeploymentStrategy(String deploymentMode)方法

单元测试

与Spring集成时,可以使用标准的Flowable测试工具轻松测试业务流程

JUnit 5测试
@ExtendWith(FlowableSpringExtension.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SpringJunitJupiterTest.TestConfiguration.class)
public class MyBusinessProcessTest {

  @Autowired
  private RuntimeService runtimeService;

  @Autowired
  private TaskService taskService;

  @Test
  @Deployment
  void simpleProcessTest() {
    runtimeService.startProcessInstanceByKey("simpleProcess");
    Task task = taskService.createTaskQuery().singleResult();
    assertEquals("My Task", task.getName());

    taskService.complete(task.getId());
    assertEquals(0, runtimeService.createProcessInstanceQuery().count());

  }
}

你可能感兴趣的:(Flowable与Spring集成)