oracle 12c 最大1000列,Activiti+Oracle,在数据量大的时候报错:无法支持1000列以上...

因为业务需要,我这里可能需要非常多的人进行会签任务操作

大约是几百人

然后Activiti在存流程变量的时候,系统报错如下图所示

查看后台打印的sql为

看来Oracle不支持,1000列以上的sql。应该可以通过数据库的设置,来进行修改。

有一个数据库,执行同样的业务,并不会报错,估计是数据库可以设置,但是没调好。。。。

只能研究了一下,去修改下源码吧

总结了之后,需要修改的地方多,但是不难,很简单,因为Activiti需要操作很多张表,都是相同的问题。总结如下

1.HistoricVariableInstance

源码包里找到这个映射文件 HistoricVariableInstance.xml

找到插入流程变量的时候,的代码,修改如下

BEGIN

INSERT INTO ${prefix}ACT_HI_VARINST (ID_,PROC_INST_ID_,EXECUTION_ID_,TASK_ID_,NAME_,REV_,VAR_TYPE_,BYTEARRAY_ID_,DOUBLE_,LONG_,TEXT_,TEXT2_,CREATE_TIME_,LAST_UPDATED_TIME_) VALUES

(#{historicVariable.id,jdbcType=VARCHAR},#{historicVariable.processInstanceId,#{historicVariable.executionId,#{historicVariable.taskId,#{historicVariable.variableName,#{historicVariable.revision,#{historicVariable.variableType,#{historicVariable.byteArrayRef,typeHandler=ByteArrayRefTypeHandler},#{historicVariable.doubleValue,jdbcType=DOUBLE},#{historicVariable.longValue,jdbcType=BIGINT},#{historicVariable.textValue,#{historicVariable.textValue2,#{historicVariable.createTime,jdbcType=TIMESTAMP},#{historicVariable.lastUpdatedTime,jdbcType=TIMESTAMP})

;END ;

2.HistoricTaskInstanceEntity

发现是HistoricTaskInstanceEntity这个对象的这个方法bulkInsertHistoricTaskInstance_oracle

BEGIN

INSERT INTO ${prefix}ACT_HI_TASKINST (

ID_,PROC_DEF_ID_,PARENT_TASK_ID_,DESCRIPTION_,OWNER_,ASSIGNEE_,START_TIME_,CLAIM_TIME_,END_TIME_,DURATION_,DELETE_REASON_,TASK_DEF_KEY_,FORM_KEY_,PRIORITY_,DUE_DATE_,CATEGORY_,TENANT_ID_

) VALUES

(#{historicTask.id,#{historicTask.processDefinitionId,#{historicTask.processInstanceId,#{historicTask.executionId,#{historicTask.name,#{historicTask.parentTaskId,#{historicTask.description,#{historicTask.owner,#{historicTask.assignee,#{historicTask.startTime,#{historicTask.claimTime,#{historicTask.endTime,#{historicTask.durationInMillis,#{historicTask.deleteReason,#{historicTask.taskDefinitionKey,#{historicTask.formKey,#{historicTask.priority,jdbcType=INTEGER},#{historicTask.dueDate,#{historicTask.category,#{historicTask.tenantId,jdbcType=VARCHAR})

;END ;

3.HistoricActivityInstanceEntity

执行后报错如下

发现是

org.activiti.engine.impl.persistence.entity.HistoricActivityInstanceEntity.bulkInsertHistoricActivityInstance_oracle-Inline

HistoricActivityInstanceEntity这个对象,bulkInsertHistoricActivityInstance_oracle这个方法

修改HistoricActivityInstance.xml文件中的bulkInsertHistoricActivityInstance_oracle这个方法,修改代码如下

BEGIN

INSERT INTO ${prefix}ACT_HI_ACTINST (

ID_,ACT_ID_,CALL_PROC_INST_ID_,ACT_NAME_,ACT_TYPE_,TENANT_ID_

) VALUES

(#{historicActivityInstance.id,#{historicActivityInstance.processDefinitionId,#{historicActivityInstance.processInstanceId,#{historicActivityInstance.executionId,#{historicActivityInstance.activityId,#{historicActivityInstance.taskId,#{historicActivityInstance.calledProcessInstanceId,#{historicActivityInstance.activityName,#{historicActivityInstance.activityType,#{historicActivityInstance.assignee,#{historicActivityInstance.startTime,#{historicActivityInstance.endTime,#{historicActivityInstance.durationInMillis,#{historicActivityInstance.tenantId,jdbcType=VARCHAR})

;END ;

4.ExecutionEntity

不出意外,又报错了,这次是这个

org.activiti.engine.impl.persistence.entity.ExecutionEntity.bulkInsertExecution_oracle

修改Execution.xml这个文件中的bulkInsertExecution_oracle这个方法

代码如下

BEGIN

INSERT INTO ${prefix}ACT_RU_EXECUTION (ID_,BUSINESS_KEY_,IS_ACTIVE_,IS_CONCURRENT_,IS_SCOPE_,IS_EVENT_SCOPE_,PARENT_ID_,SUPER_EXEC_,SUSPENSION_STATE_,CACHED_ENT_STATE_,TENANT_ID_,NAME_) VALUES

(#{execution.id,1,#{execution.processInstanceId,#{execution.businessKey,#{execution.processDefinitionId,#{execution.activityId,#{execution.isActive,jdbcType=BOOLEAN},#{execution.isConcurrent,#{execution.isScope,#{execution.isEventScope,#{execution.parentId,#{execution.superExecutionId,#{execution.suspensionState,#{execution.cachedEntityState,#{execution.tenantId,#{execution.name,jdbcType=VARCHAR})

;END ;

5.TaskEntity

org.activiti.engine.impl.persistence.entity.TaskEntity.bulkInsertTask_oracle

修改Task.xml中bulkInsertTask_oracle这个方法

代码如下

BEGIN

INSERT INTO ${prefix}ACT_RU_TASK (ID_,DELEGATION_,FORM_KEY_) VALUES

(#{task.id,#{task.name,#{task.parentTaskId,#{task.description,#{task.priority,#{task.createTime,#{task.owner,#{task.assignee,#{task.delegationStateString,#{task.executionId,#{task.processInstanceId,#{task.processDefinitionId,#{task.taskDefinitionKey,#{task.dueDate,#{task.category,#{task.suspensionState,#{task.tenantId,#{task.formKey,jdbcType=VARCHAR})

;END ;

6.VariableInstanceEntity

org.activiti.engine.impl.persistence.entity.VariableInstanceEntity.bulkInsertVariableInstance_oracle

修改VariableInstance.xml中的bulkInsertVariableInstance_oracle方法

代码如下

BEGIN

INSERT INTO ${prefix}ACT_RU_VARIABLE (ID_,TYPE_,TEXT2_) VALUES

(#{variable.id,#{variable.typeName,jdbcType=VARCHAR },#{variable.name,#{variable.processInstanceId,#{variable.executionId,#{variable.taskId,#{variable.byteArrayRef,#{variable.doubleValue,#{variable.longValue,#{variable.textValue,#{variable.textValue2,jdbcType=VARCHAR})

;END ;

执行成功,以上六个对象,对应六张表,也可以看出Activiti启动的时候,会操作这六张表

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值