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