Acitiviti6.0与Spring容器集成

2019-03-05  本文已影响0人  我有一只喵喵

Acitiviti与Spring容器集成

一、配置ProcessEngineFactooryBean

1、maven依赖

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring</artifactId>
    <version>6.0.0</version>
</dependency>

2、配置文件详解

<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
       <property name="driverClass" value="com.mysql.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost:3306/spring_activiti"/>
       <property name="username" value="root"/>
       <property name="password" value="1234"/>
   </bean>
<!--配置事务管理器-->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <!--注入数据源-->
       <property name="dataSource" ref="dataSource"/>
   </bean>
   <!--配置注解方式配置事务-->
   <tx:annotation-driven  proxy-target-class="true" transaction-manager="transactionManager"/>
<!--定义基于Spring的引擎配置对象BEAN-->
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="dataSource" ref="dataSource"/>
        <property name="transactionManager" ref="transactionManager"/>
        <property name="databaseSchemaUpdate" value="true"/>
        <!--<property name="jobExecutorActivate" value="false"/>-->
    </bean>
<!--配置引擎工厂对象BEAN-->
   <bean id="processEngineFactory" class="org.activiti.spring.ProcessEngineFactoryBean">
       <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
   </bean>
 <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  </bean>
> <!--使用spring提供的工厂方式获取actititi7个service接口对象-->
    <bean id="repositoryService" factory-bean="processEngineFactory" factory-method="getRepositoryService"/>
    <bean id="runtimeService" factory-bean="processEngineFactory" factory-method="getRuntimeService"/>
    <bean id="formService" factory-bean="processEngineFactory" factory-method="getFormService"/>
    <bean id="identityService" factory-bean="processEngineFactory" factory-method="getIdentityService"/>
    <bean id="historyService" factory-bean="processEngineFactory" factory-method="getHistoryService"/>
    <bean id="managementService" factory-bean="processEngineFactory" factory-method="getManagementService"/>
    <bean id="taskService" factory-bean="processEngineFactory" factory-method="getTaskService"/>

二、自动部署流程定义

自动部署是通过Spring方式创建流程引擎的一个独有功能,可以在初始化引擎时自动把定义的资源部署到引擎重。部署的方式时利用Spring提供的Resource功能实现的

1、配置容器启动自动部署流程定义文件

<!--定义基于Spring的引擎配置对象BEAN-->
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="dataSource" ref="dataSource"/>
        <property name="transactionManager" ref="transactionManager"/>
        <property name="databaseSchemaUpdate" value="true"/>
        
        <property name="deploymentResources" value="classpath:*.bpmn20.xml"/>
 
    </bean>

2、配置自动部署过滤重复资源拦截器的工作方式

然而如果每次spring容器重启则都会重新部署这些资源文件,而在spring自动部署时会经过一个过滤重复文件的拦截器,这里可以通过为SpringProcessEngineConfiguration设置deploymentMode属性来确定在此拦截器中采用何种方式进行过滤。

默认提供了三种工作方式:

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

如果上述属性的作用还不满足与当前的业务,那么我们可以自定义来进行控制。
通过继承SpringProcessEngineConfiguration覆写getAutoDeploymentStrategy(String deploymentMode)。

三、表达式

在activiti重表达式应用非常广泛,通过表达式可以动态计算(读取)一切可以计算的表达式,从而动态获得动态值。例如可以通过设置用户任务的办理人,执行一个java service任务,或者执行Execution监听器、task监听器、排他分支的输出流的条件判断等
在acitciti中,所有表达式中出现的变量需要实现序列化接口

1、UEL表达式应用示例

表达式 表达式含义
${myVar} 获取变量名称为myVar的变量值
${myVar.name} 从变量myVar中读取name属性
$(serviceBean.confirm()) 执行变量名称为serviceBean的confirm方法
$(serviceBean.confirm('aaaa')) 执行变量名称为serviceBean的confirm方法,并且传递了参数,这里的参数可以继续使用URL表达式方式获取,比如$(serviceBean.confirm(param))
$(serviceBean.confirm(name,execution)) 执行变量名称为serviceBean的confirm方法,这里传递的参数为引擎内置变量

默认的,spring中的所有bean对于所有的流程来说都是可见的,那么如果我们只想对流程暴漏部分的bean,或者不对流程暴漏任何的bean该如何做呢?在表达式中获取bean实质上是通过ProcessEngineConfiguration中beans属性(map结构)来获取。

所以可以通过为processEngineConfigurantion配置beans属性,然后为beans这个map结构中添加bean或者不添加实现上述特性。

<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" />

2、引擎内置3变量

变量名称 变量含义
execution 此变量在运行阶段总是可以调用,对应的接口:org.activiti.engine.delegate.DelegateExecution
task execution可以在整个运行期的所有活动上调用,但是task仅仅支持用户任务(UserTask),而且限定为expression类型的表达式
authenticatedUserId 此变量仅在启动流程实例前调用IdentityService的setAuthenticatedUserId()方法时才会由引擎提供
上一篇下一篇

猜你喜欢

热点阅读