日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activiti+Oracle,在数据量大的时候报错:无法支持1000列以上 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

因為業務需要,我這里可能需要非常多的人進行會簽任務操作

大約是幾百人

然后Activiti在存流程變量的時候,系統報錯如下圖所示

查看后臺打印的sql為

?

看來Oracle不支持,1000列以上的sql。應該可以通過數據庫的設置,來進行修改。

有一個數據庫,執行同樣的業務,并不會報錯,估計是數據庫可以設置,但是沒調好。。。。

?

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

總結了之后,需要修改的地方多,但是不難,很簡單,因為Activiti需要操作很多張表,都是相同的問題。總結如下

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

?

發現是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

?

執行后報錯如下

發現是

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>

?

執行成功,以上六個對象,對應六張表,也可以看出Activiti啟動的時候,會操作這六張表

?

?

轉載于:https://my.oschina.net/glorylion/blog/896585

總結

以上是生活随笔為你收集整理的Activiti+Oracle,在数据量大的时候报错:无法支持1000列以上的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。