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列以上相关推荐

  1. mysql插入性能_mysql 数据量大时插入和查询性能

    现在mysql中有数据33.8w的数据,然后做查询和更新或插入操作,速度很慢,基本100条数据就要1.68s.好慢啊,我要测试一下,到底慢在哪?能不能提高点速度? 参考一篇博文:http://blog ...

  2. 我艹,MySQL数据量大时,delete操作无法命中索引。

    来自:Java面试那些事儿 最近,在脉脉上看到一个楼主提出的问题:MySQL数据量大时,delete操作无法命中索引:并且还附上了相关案例截图. 最终,楼主通过开启MySQL分析优化器追踪,定位到是优 ...

  3. 历史数据如何处理_数据库表数据量大读写缓慢如何优化(1)【冷热分离】

    今天讨论的内容是冷热分离,也许概念并不陌生,对其使用场景也比较熟悉,但涉及锁的内容时仍然需要认真思考,这部分内容在我们实际开发中的"坑"还是不少的. 业务场景一 曾经经历过供应链相 ...

  4. mysql给数据量大的表添加索引的办法

    有一个问题,一张表有3百万条记录,随着时间的增加,记录量会更多,此时查询速度很慢.在创建此表前没有未相应字段添加索引,所以此时需要为表添加索引.但是因为数据量大的原因,索引添加不成功,想了很多办法,终 ...

  5. 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答

    1 文章概述 在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时 ...

  6. 解决Mysql数据量大的时候 分页优化(使用limit)的问题

    解决Mysql数据量大的时候 分页优化(使用limit)的问题 参考文章: (1)解决Mysql数据量大的时候 分页优化(使用limit)的问题 (2)https://www.cnblogs.com/ ...

  7. Echars 折线图 自动向右平移显示数据(数据量大的时候适应)

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>Ech ...

  8. Java List数据量大, 需要分片批次操作

    很久前,写过关于list数据量大,分批处理的相关介绍文章(自定义的java代码实现): SSM Mybatis 批量插入 采用分批处理一次500条_默默不代表沉默-CSDN博客_mybatis分批插入 ...

  9. form 提交 无法显示该网页 数据量大提交Post too large错误

    如果form表单提交数据量大的时候会出现无法显示该网页. 解决办法1: 在 $TOMCAT_HOME$/conf/server.xml中找到 <Connector port="8080 ...

最新文章

  1. 广域网智能流量调度—Vecloud
  2. 机器学习(1.机器学习概述、数据集的组成以及机器学习的特征工程)
  3. scala hashmap_如何在Scala中将Hashmap转换为Map?
  4. Python 最强编辑器PyCharm详细使用指南!
  5. 安装faac编译问题
  6. SQL 查询CET使用领悟
  7. 如何进行软件需求分析
  8. 左神算法:找到二叉树中符合搜索二叉树条件的最大拓扑结构(Java版)
  9. ubuntu虚拟机上外网设置
  10. html代码 通用代码,html5可以通用的几段代码 | 睿客网
  11. 0x和\u区别,unicode编码
  12. selenium3填坑
  13. 编程十年 (14):毁人不倦2
  14. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第九章 深入理解GPS
  15. 男人哭了,是因为他真的爱了
  16. 在单面打印机上使用WPS实现手工双面打印
  17. 以Windows系统搭建基于Ethereum(以太坊)的区块链开发环境(具体操作与截图)
  18. 蓝桥杯大学JAVA题型_蓝桥杯 2020年省赛真题 10月第二场 (Java 大学B组)
  19. Tekton实践篇-Tekton和Argocd的梦幻联动
  20. 英文字体(for banner)

热门文章

  1. spring23:Aspectj实现异常通知@AfterThrowing
  2. 第十三章:位图(三)
  3. Android 必须知识 PWA Android Instant Apps
  4. 站长们都会,但是都会写错的robots!
  5. Spring MVC 下设置默认访问页面的3种方式
  6. python 编码问题
  7. 虚拟化:IT技术的第三次革命
  8. 面向对象的JavaScript编程
  9. SOCKS代理工具EarthWorm、sSoks
  10. 图片宽度自适应浏览器宽度