Spring ACTIVITI 7中批次的defaultExecutorType

Spring ACTIVITI 7中批次的defaultExecutorType,spring,hibernate,mybatis,activiti,Spring,Hibernate,Mybatis,Activiti,我正在使用基于spring配置的Activiti7。 据我们所知,ACTIVITI在内部使用mybatis框架。我们需要批量执行操作,即批量创建和删除实例。 Activiti使用的默认执行器类型很简单。我们正在寻找性能,因此我们正在尝试在ACTIVITI中设置defaultExecutorType=Batch(如mybatis所建议的) 我试图在mappings.xml文件(org.activiti.db.mapping)中的activiti-engine-7.0.0JAR中设置此配置 <

我正在使用基于spring配置的Activiti7。 据我们所知,ACTIVITI在内部使用mybatis框架。我们需要批量执行操作,即批量创建和删除实例。 Activiti使用的默认执行器类型很简单。我们正在寻找性能,因此我们正在尝试在ACTIVITI中设置defaultExecutorType=Batch(如mybatis所建议的)

我试图在mappings.xml文件(org.activiti.db.mapping)中的activiti-engine-7.0.0JAR中设置此配置

<settings>
    <setting name="lazyLoadingEnabled" value="false" />
    <setting name="defaultFetchSize" value="1000" />
    <setting name="defaultExecutorType" value="BATCH" />
  </settings>

但在将defaultExecutorType设置为批处理后,它并没有提交数据库中的数据

注意:如果我将StandaloneProcessEngineConfiguration与defaultExecutorType=Batch一起使用,则它工作正常

我正在添加我的类文件、进程定义、pom.xml和activiti配置文件

请推荐我

致意

工件:

activiti.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
 
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
        <property name="username" value="username" />
        <property name="password" value="password" />
    </bean>
            
    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">            
            <props>
                <prop key="hibernate.show_sql">true</prop>
                  
            </props>
          
        </property> 
    </bean>
    
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">   
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
            
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
         <property name="dataSource" ref="dataSource" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="databaseSchemaUpdate" value="true" />      
    </bean>
 
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>
 
    <bean id="runtimeService" factory-bean="processEngine"
          factory-method="getRuntimeService" />
    <bean id="taskService" factory-bean="processEngine"
          factory-method="getTaskService" />
    <bean id="repositoryService" factory-bean="processEngine"
          factory-method="getRepositoryService" />
</beans> 

真的
TestClient.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.onlyactiviti;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;

/**
 *
 * @author developer
 */
public class TestClient {

    public static ProcessEngine processEngine;
    private static RuntimeService runtimeService;

    static String currentActiveNode;
    static String transitionName;
    static String transitionDecision = null;


    public static void main(String[] args) {

        System.out.println("******************************************************************************** ");

        System.out.println("Starting Process Engine .............. ");

        //processEngine = getProcessConfiguration().buildProcessEngine();//Working properly if we use standalone mode
        processEngine = ProcessEngines.getDefaultProcessEngine();//Not committing data if we use SpringbasedConfiguration
        runtimeService = processEngine.getRuntimeService();

        System.out.println("Process Engine  Started.............. ");
        System.out.println("******************************************************************************** ");

        System.out.println("******************************************************************************** ");
        System.out.println(" Deploying process definition ....");
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createDeployment().addClasspathResource("State_Machine.bpmn").deploy();
        System.out.println("Process Definition Deployed Successfully");
        System.out.println("******************************************************************************** ");

        String pdName = "State_Machine";
        String instancekey = "MyKey2";
        Map transientVars = new HashMap();

        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(pdName, instancekey, transientVars);
        System.out.println(" Process Defintion Name :" + processInstance.getProcessDefinitionName());
        System.out.println(" Created Process Instance :" + processInstance.getId());
        System.out.println(" ProcessInstance.getActivityId() " + processInstance.getActivityId());

        System.out.println("******************************************************************************** ");
        System.out.println(" List Available Executions :  ");
        List<Execution> executions = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).list();
        System.out.println("size of executions::" + executions.size());//If spring based configuration is used then it return 0 and if standalone configuration is used it return 2
        for (Execution ex : executions) {
            if (ex.getActivityId() != null) {
                List<String> activities = runtimeService.getActiveActivityIds(ex.getId());
                System.out.println("\tPrinting activities for execution with id " + ex.getId() + ", ex.isEnded()=" + ex.isEnded() + ", ex.getActivityId()='" + ex.getActivityId() + "'");
                for (String activity : activities) {
                    System.out.println("\t\tFound activity:" + activity);
                    currentActiveNode = activity;
                }
            } else {
                System.out.println("execution activiti id is null - " + ex.getName());
            }
        }
        System.out.println("******************************************************************************** ");

        System.out.println("******************************************************************************** ");
        System.out.println("Performing Transition to next state ");
        transitionName = "Step2";

        List<Execution> executions1 = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).processInstanceBusinessKey(instancekey, true).activityId(currentActiveNode).list();
        if (executions1.size() > 0) {
            Execution execution = executions1.get(0);
            Map processVariablesForTrigger = new HashMap();
            processVariablesForTrigger.put("transition", transitionName);
            runtimeService.trigger(execution.getId(), processVariablesForTrigger);
            System.out.println("\n Execute Transition Sucessfully.");
        } else {
            System.out.println("\n Execution Size is ." + executions1.size());
        }

        System.out.println("******************************************************************************** ");
        System.out.println(" List Available Executions :  ");
        executions = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).list();
        System.out.println("size of executions::" + executions.size());//If spring based configuration is used then it return 0 and if standalone configuration is used it return 2
        for (Execution ex : executions) {
            if (ex.getActivityId() != null) {//Not sure what such records represent, but one execution is found per instance like this!
                List<String> activities = runtimeService.getActiveActivityIds(ex.getId());
                System.out.println("\tPrinting activities for execution with id " + ex.getId() + ", ex.isEnded()=" + ex.isEnded() + ", ex.getActivityId()='" + ex.getActivityId() + "'");
                for (String activity : activities) {
                    System.out.println("\t\tFound activity:" + activity);
                    currentActiveNode = activity;
                }
            } else {
                System.out.println("execution activiti id is null - " + ex.getName());
            }
        }
        System.out.println("******************************************************************************** ");

        System.out.println("******************************************************************************** ");

        transitionName = "End";

        System.out.println("Performing Transition to next state ");
        executions1 = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).processInstanceBusinessKey(instancekey, true).activityId(currentActiveNode).list();
        if (executions1.size() > 0) {
            Execution execution = executions1.get(0);
            Map processVariablesForTrigger = new HashMap();
            processVariablesForTrigger.put("transition", transitionName);
            runtimeService.trigger(execution.getId(), processVariablesForTrigger);
            System.out.println("\n Execute Transition Sucessfully.");
        } else {
            System.out.println("\n Execution Size is ." + executions1.size());
        }

        processEngine.close();

    }

    public static ProcessEngineConfiguration getProcessConfiguration() {
        ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
                .setJdbcUrl("jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = xe)))")
                .setJdbcUsername("username")
                .setJdbcPassword("password")
                .setJdbcDriver("oracle.jdbc.OracleDriver")
                .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        return cfg;
    }

}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包com.mycompany.onlyactiviti;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入org.activiti.engine.ProcessEngine;
导入org.activiti.engine.ProcessEngineConfiguration;
导入org.activiti.engine.ProcessEngines;
导入org.activiti.engine.RepositoryService;
导入org.activiti.engine.RuntimeService;
导入org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
导入org.activiti.engine.runtime.Execution;
导入org.activiti.engine.runtime.ProcessInstance;
/**
*
*@author-developer
*/
公共类测试客户端{
公共静态处理引擎;
私有静态RuntimeService RuntimeService;
静态字符串currentActiveNode;
静态字符串转换名;
静态字符串transitionDecision=null;
公共静态void main(字符串[]args){
System.out.println(“*************************************************************************************************************************************************”);
System.out.println(“启动过程引擎”);
//processEngine=getProcessConfiguration().buildProcessEngine();//如果使用独立模式,则工作正常
processEngine=ProcessEngines.getDefaultProcessEngine();//如果使用SpringbasedConfiguration,则不会提交数据
runtimeService=processEngine.getRuntimeService();
System.out.println(“过程引擎已启动”);
System.out.println(“*************************************************************************************************************************************************”);
System.out.println(“*************************************************************************************************************************************************”);
System.out.println(“部署过程定义…”);
RepositoryService RepositoryService=processEngine.getRepositoryService();
repositoryService.createDeployment().addClasspathResource(“State_Machine.bpmn”).deploy();
System.out.println(“已成功部署流程定义”);
System.out.println(“*************************************************************************************************************************************************”);
字符串pdName=“State\u Machine”;
字符串instancekey=“MyKey2”;
Map transientVars=新HashMap();
ProcessInstance ProcessInstance=runtimeService.startProcessInstanceByKey(pdName、instancekey、transientVars);
System.out.println(“进程定义名称:+processInstance.getProcessDefinitionName());
System.out.println(“创建的流程实例:+processInstance.getId());
System.out.println(“ProcessInstance.getActivityId()”+ProcessInstance.getActivityId());
System.out.println(“*************************************************************************************************************************************************”);
System.out.println(“列出可用执行:”);
列表执行=runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).List();
System.out.println(“执行的大小::”+executions.size());//如果使用基于spring的配置,则返回0;如果使用独立配置,则返回2
执行(例如:执行){
如果(例如getActivityId()!=null){
List activities=runtimeService.getActiveActivityId(例如getId());
System.out.println(“\t打印id为“+ex.getId()+”、ex.isEnded()=“+ex.isEnded()+”、ex.getActivityId()=”、“+ex.getActivityId()+”)的执行活动;
for(字符串活动:活动){
System.out.println(“\t\t发现活动:“+activity”);
currentActiveNode=活动;
}
}否则{
System.out.println(“执行活动id为null-”+ex.getName());
}
}
System.out.println(“*************************************************************************************************************************************************”);
System.out.println(“*************************************************************************************************************************************************”);
System.out.println(“执行到下一个状态的转换”);
transitionName=“Step2”;
List executions1=runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).processInstanceBusinessKey(instancekey,true).activityId(currentActiveNode).List();
如果(executions1.size()>0){
执行=执行1.get(0);
Map processVariablesForTrigger=new HashMap();
ProcessVariablesFort
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ActivitiDeveloperQuickStart</groupId>
    <artifactId>ActivitiDeveloperQuickStart</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!-- ... other configurations may exist, such as a build stanza, depending your environment ... -->
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>7.0.0.GA</version>              
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>19.7.0.0</version>
        </dependency>
       
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.5.RELEASE</version>
       </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.5.RELEASE</version>               
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.2.5.RELEASE</version>
       </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.5.RELEASE</version>   
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="State_Machine" name="State Machine" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <receiveTask id="step1" name="Step1_Success"></receiveTask>
    <receiveTask id="step2" name="Step2_Success"></receiveTask>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="step1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="step1" targetRef="step2">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[#{"Step2".equals(transition)}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="flow3" sourceRef="step2" targetRef="endevent1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[#{"End".equals(transition)}]]></conditionExpression>
    </sequenceFlow>
  </process>
</definitions>