Activiti+Oracle,在数据量大的时候报错:无法支持1000列以上
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
因為業(yè)務(wù)需要,我這里可能需要非常多的人進行會簽任務(wù)操作
大約是幾百人
然后Activiti在存流程變量的時候,系統(tǒng)報錯如下圖所示
查看后臺打印的sql為
?
看來Oracle不支持,1000列以上的sql。應(yīng)該可以通過數(shù)據(jù)庫的設(shè)置,來進行修改。
有一個數(shù)據(jù)庫,執(zhí)行同樣的業(yè)務(wù),并不會報錯,估計是數(shù)據(jù)庫可以設(shè)置,但是沒調(diào)好。。。。
?
只能研究了一下,去修改下源碼吧
總結(jié)了之后,需要修改的地方多,但是不難,很簡單,因為Activiti需要操作很多張表,都是相同的問題。總結(jié)如下
1.HistoricVariableInstance
源碼包里找到這個映射文件?? HistoricVariableInstance.xml
找到插入流程變量的時候,的代碼,修改如下
<insert id="bulkInsertHistoricVariableInstance_oracle" parameterType="java.util.List">BEGIN<foreach collection="list" item="historicVariable" index="index" separator=";" >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, jdbcType=VARCHAR},#{historicVariable.executionId, jdbcType=VARCHAR},#{historicVariable.taskId, jdbcType=VARCHAR},#{historicVariable.variableName, jdbcType=VARCHAR},#{historicVariable.revision, jdbcType=VARCHAR},#{historicVariable.variableType, jdbcType=VARCHAR},#{historicVariable.byteArrayRef, typeHandler=ByteArrayRefTypeHandler},#{historicVariable.doubleValue, jdbcType=DOUBLE},#{historicVariable.longValue, jdbcType=BIGINT},#{historicVariable.textValue, jdbcType=VARCHAR},#{historicVariable.textValue2, jdbcType=VARCHAR},#{historicVariable.createTime, jdbcType=TIMESTAMP},#{historicVariable.lastUpdatedTime, jdbcType=TIMESTAMP})</foreach>;END ;</insert>?
2.HistoricTaskInstanceEntity
?
發(fā)現(xiàn)是HistoricTaskInstanceEntity這個對象的這個方法bulkInsertHistoricTaskInstance_oracle
修改代碼如下
<insert id="bulkInsertHistoricTaskInstance_oracle" parameterType="java.util.List">BEGIN<foreach collection="list" item="historicTask" index="index" separator=";">INSERT INTO ${prefix}ACT_HI_TASKINST (ID_,PROC_DEF_ID_,PROC_INST_ID_,EXECUTION_ID_,NAME_,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 ,jdbcType=VARCHAR},#{historicTask.processDefinitionId, jdbcType=VARCHAR},#{historicTask.processInstanceId, jdbcType=VARCHAR},#{historicTask.executionId, jdbcType=VARCHAR},#{historicTask.name ,jdbcType=VARCHAR},#{historicTask.parentTaskId ,jdbcType=VARCHAR},#{historicTask.description ,jdbcType=VARCHAR},#{historicTask.owner ,jdbcType=VARCHAR},#{historicTask.assignee ,jdbcType=VARCHAR},#{historicTask.startTime, jdbcType=TIMESTAMP},#{historicTask.claimTime, jdbcType=TIMESTAMP},#{historicTask.endTime, jdbcType=TIMESTAMP},#{historicTask.durationInMillis ,jdbcType=BIGINT},#{historicTask.deleteReason ,jdbcType=VARCHAR},#{historicTask.taskDefinitionKey ,jdbcType=VARCHAR},#{historicTask.formKey ,jdbcType=VARCHAR},#{historicTask.priority, jdbcType=INTEGER},#{historicTask.dueDate, jdbcType=TIMESTAMP},#{historicTask.category, jdbcType=VARCHAR},#{historicTask.tenantId, jdbcType=VARCHAR})</foreach>;END ;</insert>?
3.HistoricActivityInstanceEntity
?
執(zhí)行后報錯如下
發(fā)現(xiàn)是
org.activiti.engine.impl.persistence.entity.HistoricActivityInstanceEntity.bulkInsertHistoricActivityInstance_oracle-Inline
?
HistoricActivityInstanceEntity這個對象,bulkInsertHistoricActivityInstance_oracle這個方法
修改HistoricActivityInstance.xml文件中的bulkInsertHistoricActivityInstance_oracle這個方法,修改代碼如下
<insert id="bulkInsertHistoricActivityInstance_oracle" parameterType="java.util.List">BEGIN<foreach collection="list" item="historicActivityInstance" index="index" separator=";">INSERT INTO ${prefix}ACT_HI_ACTINST (ID_,PROC_DEF_ID_,PROC_INST_ID_,EXECUTION_ID_,ACT_ID_,TASK_ID_,CALL_PROC_INST_ID_,ACT_NAME_,ACT_TYPE_,ASSIGNEE_,START_TIME_,END_TIME_,DURATION_,TENANT_ID_) VALUES (#{historicActivityInstance.id ,jdbcType=VARCHAR},#{historicActivityInstance.processDefinitionId, jdbcType=VARCHAR},#{historicActivityInstance.processInstanceId, jdbcType=VARCHAR},#{historicActivityInstance.executionId, jdbcType=VARCHAR},#{historicActivityInstance.activityId ,jdbcType=VARCHAR},#{historicActivityInstance.taskId ,jdbcType=VARCHAR},#{historicActivityInstance.calledProcessInstanceId ,jdbcType=VARCHAR},#{historicActivityInstance.activityName ,jdbcType=VARCHAR},#{historicActivityInstance.activityType ,jdbcType=VARCHAR},#{historicActivityInstance.assignee ,jdbcType=VARCHAR},#{historicActivityInstance.startTime, jdbcType=TIMESTAMP},#{historicActivityInstance.endTime, jdbcType=TIMESTAMP},#{historicActivityInstance.durationInMillis ,jdbcType=BIGINT},#{historicActivityInstance.tenantId, jdbcType=VARCHAR})</foreach>;END ;</insert>?
4.ExecutionEntity
?
不出意外,又報錯了,這次是這個
org.activiti.engine.impl.persistence.entity.ExecutionEntity.bulkInsertExecution_oracle
修改Execution.xml這個文件中的bulkInsertExecution_oracle這個方法
代碼如下
<insert id="bulkInsertExecution_oracle" parameterType="java.util.List">BEGIN<foreach collection="list" item="execution" index="index" separator=";">INSERT INTO ${prefix}ACT_RU_EXECUTION (ID_, REV_, PROC_INST_ID_, BUSINESS_KEY_, PROC_DEF_ID_, ACT_ID_,IS_ACTIVE_, IS_CONCURRENT_, IS_SCOPE_,IS_EVENT_SCOPE_, PARENT_ID_, SUPER_EXEC_, SUSPENSION_STATE_, CACHED_ENT_STATE_, TENANT_ID_, NAME_) VALUES (#{execution.id ,jdbcType=VARCHAR},1,#{execution.processInstanceId, jdbcType=VARCHAR},#{execution.businessKey, jdbcType=VARCHAR},#{execution.processDefinitionId ,jdbcType=VARCHAR},#{execution.activityId ,jdbcType=VARCHAR},#{execution.isActive ,jdbcType=BOOLEAN},#{execution.isConcurrent ,jdbcType=BOOLEAN},#{execution.isScope ,jdbcType=BOOLEAN},#{execution.isEventScope ,jdbcType=BOOLEAN},#{execution.parentId, jdbcType=VARCHAR},#{execution.superExecutionId, jdbcType=VARCHAR},#{execution.suspensionState, jdbcType=INTEGER},#{execution.cachedEntityState, jdbcType=INTEGER},#{execution.tenantId, jdbcType=VARCHAR},#{execution.name, jdbcType=VARCHAR})</foreach>;END ;</insert>?
5.TaskEntity
?
org.activiti.engine.impl.persistence.entity.TaskEntity.bulkInsertTask_oracle
修改Task.xml中bulkInsertTask_oracle這個方法
代碼如下
<insert id="bulkInsertTask_oracle" parameterType="java.util.List">BEGIN<foreach collection="list" item="task" index="index" separator=";">INSERT INTO ${prefix}ACT_RU_TASK (ID_, REV_, NAME_, PARENT_TASK_ID_, DESCRIPTION_, PRIORITY_, CREATE_TIME_, OWNER_,ASSIGNEE_, DELEGATION_, EXECUTION_ID_, PROC_INST_ID_, PROC_DEF_ID_, TASK_DEF_KEY_, DUE_DATE_, CATEGORY_,SUSPENSION_STATE_, TENANT_ID_, FORM_KEY_) VALUES (#{task.id, jdbcType=VARCHAR},1,#{task.name, jdbcType=VARCHAR},#{task.parentTaskId, jdbcType=VARCHAR},#{task.description, jdbcType=VARCHAR},#{task.priority, jdbcType=INTEGER},#{task.createTime, jdbcType=TIMESTAMP},#{task.owner, jdbcType=VARCHAR},#{task.assignee, jdbcType=VARCHAR},#{task.delegationStateString, jdbcType=VARCHAR},#{task.executionId, jdbcType=VARCHAR},#{task.processInstanceId, jdbcType=VARCHAR},#{task.processDefinitionId, jdbcType=VARCHAR},#{task.taskDefinitionKey, jdbcType=VARCHAR},#{task.dueDate, jdbcType=TIMESTAMP},#{task.category, jdbcType=VARCHAR},#{task.suspensionState, jdbcType=INTEGER},#{task.tenantId, jdbcType=VARCHAR},#{task.formKey, jdbcType=VARCHAR})</foreach>;END ;</insert>?
6.VariableInstanceEntity
?
org.activiti.engine.impl.persistence.entity.VariableInstanceEntity.bulkInsertVariableInstance_oracle
修改VariableInstance.xml中的bulkInsertVariableInstance_oracle方法
代碼如下
<insert id="bulkInsertVariableInstance_oracle" parameterType="java.util.List">BEGIN<foreach collection="list" item="variable" index="index" separator=";">INSERT INTO ${prefix}ACT_RU_VARIABLE (ID_, REV_,TYPE_, NAME_, PROC_INST_ID_, EXECUTION_ID_, TASK_ID_, BYTEARRAY_ID_,DOUBLE_, LONG_ , TEXT_, TEXT2_) VALUES (#{variable.id, jdbcType=VARCHAR},1,#{variable.typeName, jdbcType=VARCHAR },#{variable.name, jdbcType=VARCHAR},#{variable.processInstanceId, jdbcType=VARCHAR},#{variable.executionId, jdbcType=VARCHAR},#{variable.taskId, jdbcType=VARCHAR},#{variable.byteArrayRef, typeHandler=ByteArrayRefTypeHandler},#{variable.doubleValue, jdbcType=DOUBLE},#{variable.longValue, jdbcType=BIGINT},#{variable.textValue, jdbcType=VARCHAR},#{variable.textValue2, jdbcType=VARCHAR}) </foreach>;END ;</insert>?
執(zhí)行成功,以上六個對象,對應(yīng)六張表,也可以看出Activiti啟動的時候,會操作這六張表
?
?
轉(zhuǎn)載于:https://my.oschina.net/glorylion/blog/896585
總結(jié)
以上是生活随笔為你收集整理的Activiti+Oracle,在数据量大的时候报错:无法支持1000列以上的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL具体解释(21)-------
- 下一篇: 码栈开发手册(三)---编码方式开发(高