activiti学习(二十一)

113 阅读2分钟

image.png 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

Activiti的使用

用Java做web开发,绝大多数的项目都离不开Spring框架。自然,使用Activiti做web端管理的话,也需要将Activiti的服务交由Spring管理,接下来看看Activiti如何与Spring集成。

ProcessEngineFactoryBean

ProcessEngine可以作为普通的Spring bean。其中,和org.activiti.spring.ProcessEngineFactoryBean提供了和Spring集成的入口。该bean采用流程引擎配置并创建流程引擎。这意味着Spring属性的创建和配置与配置部分中的内容相同。对于Spring集成,配置和引擎bean如下所示:

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

目前Activiti提供了org.activiti.spring.SpringProcessEngineConfiguration帮助我们更加方便的集成到Spring中。

Spring中的事务

当将数据源传递给SpringProcessEngineConfiguration(使用属性DataSource)时,Activiti使用一个org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy。Activiti会持有传入的数据源。这样Activiti就可以将事务和Spring结合。我们就不需要手动管理Spring和Activiti之间的事务,尽管仍然允许将TransactionWaredatasourceProxy传递到SpringProcessEngineConfiguration中。在这种情况下,Activiti不会将数据源进行额外的封装。
确保自己在Spring配置中声明TransactionWaredatasourceProxy时,不要使用Spring封装过的数据源(例如DataSourceTransactionManager和JPATransactionManager未代理的数据源)。

表达式在Spring中的使用

在使用ProcessEngineFactoryBean时,默认情况下,BPMN流程中的所有表达式也将获取到Spring中的bean对象。可以配置要在表达式中暴露的bean对象,也可以配置的不暴露给Activiti的bean对象。可以用如下的方式暴露bean对象给Activiti(printer),可在printer的key下使用。要完全不暴露bean,只需在SpringProcessEngineConfiguration上传递一个空列表作为bean属性。如果未设置beans属性,则Spring中的所有bean都会暴露给Activiti。

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