美文网首页
Flowable6-整合Spring

Flowable6-整合Spring

作者: 我相信你爱过gg | 来源:发表于2017-12-17 11:46 被阅读696次

    ProcessEngineFactoryBean

    ProcessEngine 可配置为一个普通的Spring bean. 整合的时候我们需要用到 org.flowable.spring.ProcessEngineFactoryBean 类.

    <bean id="processEngineConfiguration" class="org.flowable.spring.SpringProcessEngineConfiguration">
        ...
    </bean>
    
    <bean id="processEngine" class="org.flowable.spring.ProcessEngineFactoryBean">
      <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>
    

    请注意, 这个 processEngineConfigurationbean 现在使用的是org.flowable.spring.SpringProcessEngineConfiguration 类.


    Transactions

    下面是我们在这个例子中使用的Spring配置文件. 显示的部分包含dataSource, transactionManager, processEngine和Flowable引擎服务.

    将DataSource传递给SpringProcessEngineConfiguration时, Flowable在
    org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy 内部使用包装传递的DataSource.

    这样做是为了确保从DataSource和Spring事务检索到的SQL能够很好地协同工作. 这意味着它不再需要代理的数据源自己可以在Spring中配置.

    虽然它仍然可能通过一个 TransactionAwareDataSourceProxy 进入 SpringProcessEngineConfiguration.

    <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="http://www.springframework.org/schema/beans
                                 http://www.springframework.org/schema/beans/spring-beans.xsd
                               http://www.springframework.org/schema/context
                                 http://www.springframework.org/schema/context/spring-context-2.5.xsd
                               http://www.springframework.org/schema/tx
                                 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    
      <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>
    
      <bean id="processEngineConfiguration" class="org.flowable.spring.SpringProcessEngineConfiguration">
        <property name="dataSource" ref="dataSource" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="databaseSchemaUpdate" value="true" />
        <property name="asyncExecutorActivate" value="false" />
      </bean>
    
      <bean id="processEngine" class="org.flowable.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
      </bean>
    
      <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
      <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
      <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
      <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
      <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
    
    ...
    

    表达式

    当使用 ProcessEngineFactoryBean时, 默认情况下, BPMN进程中的所有表达式将看到所有的Spring bean. 可以使用配置映射来限制要在表达式中显示的bean(甚至没有)

    <bean id="processEngineConfiguration" class="org.flowable.spring.SpringProcessEngineConfiguration">
      ...
      <property name="beans">
        <map>
          <entry key="printer" value-ref="printer" />
        </map>
      </property>
    </bean>
    
    <bean id="printer" class="org.flowable.examples.spring.Printer" />
    

    为了让所有的bean都不暴露, 只需在 SpringProcessEngineConfiguration 上传递一个空的列表作为beans属性. 当没有设置bean属性时, 上下文中的所有Spring bean都将可用.

    现在, 可以在表达式中使用暴露的bean: 例如, hello.bpmn20.xml
    显示了如何使用UEL方法表达式来调用Spring bean上的方法:

    <definitions id="definitions">
    
      <process id="helloProcess">
    
        <startEvent id="start" />
        <sequenceFlow id="flow1" sourceRef="start" targetRef="print" />
    
        <serviceTask id="print" flowable:expression="#{printer.printMessage()}" />
        <sequenceFlow id="flow2" sourceRef="print" targetRef="end" />
    
        <endEvent id="end" />
    
      </process>
    
    </definitions>
    

    自动资源部署

    Spring集成还具有用于部署资源的特殊功能. 在流程引擎配置中, 您可以指定一组资源. 在创建流程引擎时, 所有这些资源都将被扫描和部署.

    有适当的过滤, 防止重复部署. 只有当资源实际发生变化时, 才会重新部署到Flowable DB.

    <bean id="processEngineConfiguration" class="org.flowable.spring.SpringProcessEngineConfiguration">
      ...
      <property name="deploymentResources"
        value="classpath*:/org/flowable/spring/test/autodeployment/autodeploy.*.bpmn20.xml" />
    </bean>
    
    <bean id="processEngine" class="org.flowable.spring.ProcessEngineFactoryBean">
      <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>
    

    默认情况下, 上面的配置会将与过滤器匹配的所有资源归入到Flowable引擎的单个部署中. 重复过滤防止重新部署不变的资源适用于整个部署.

    在某些情况下, 这可能不是你想要的. 例如, 如果以这种方式部署一组流程资源, 并且这些资源中只有一个流程定义发生了变化, 则整个部署将被视为新的, 并且该部署中的所有流程定义将被重新部署.

    为了能够自定义部署方式, 你可以指定一个附加属性SpringProcessEngineConfiguration, deploymentMode. 该属性定义了部署将从匹配过滤器的一组资源中查找. 这个属性默认支持3个值:
    default: 将所有资源分组到一个部署中, 并对该部署重复过滤. 这是默认值.

    single-resource: 为每个单独的资源创建一个单独的部署, 并对该部署重复过滤. 这时您将每个流程定义分开部署, 并且只有在流程定义版本已更改时才创建新流程定义版本.

    resource-parent-folder: 为共享相同父文件夹的资源创建单独的部署, 并对该部署重复过滤. 可以使用此值为大多数资源创建单独的部署,但仍可以通过将其放置在共享文件夹中对其进行分组。以下是如何指定single-resource配置的示例deploymentMode:

    <bean id="processEngineConfiguration"
        class="org.flowable.spring.SpringProcessEngineConfiguration">
      ...
      <property name="deploymentResources" value="classpath*:/flowable/*.bpmn" />
      <property name="deploymentMode" value="single-resource" />
    </bean>
    

    相关文章

      网友评论

          本文标题:Flowable6-整合Spring

          本文链接:https://www.haomeiwen.com/subject/qkgkwxtx.html