Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring批处理:如何在没有序列化错误的情况下管理第一次加载?_Spring Boot_Spring Batch - Fatal编程技术网

Spring boot Spring批处理:如何在没有序列化错误的情况下管理第一次加载?

Spring boot Spring批处理:如何在没有序列化错误的情况下管理第一次加载?,spring-boot,spring-batch,Spring Boot,Spring Batch,在第一次加载时,在创建Spring批处理表之后, 默认情况下,会发生以下错误: Exception in thread "main" org.springframework.dao.CannotSerializeTransactionException: PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) valu

在第一次加载时,在创建Spring批处理表之后, 默认情况下,会发生以下错误:

Exception in thread "main" org.springframework.dao.CannotSerializeTransactionException: PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; ORA-08177:  can't serialize access for this transaction
; nested exception is java.sql.SQLException: ORA-08177: can't serialize access for this transaction
论坛上提出了一些解决方案:

  • 执行第一次加载,只需加载一行 或
  • 在创建Spring批处理表之后,在Oracle上设置每个表的初始事务数与第一个文件要加载的行数。然后重新开始加载。 或
  • 将默认隔离级别更改为READ_COMMITTED
我认为我必须将默认隔离级别保持为可序列化。 因此: 我是否必须在只有一行要加载的情况下执行第一次加载,或者, 我是否必须更改数据库中的事务数并重新启动加载

我觉得很奇怪。。。 还有别的解决办法吗? 最好的解决方案是什么


注意。

第一次加载和后续加载之间不应有差异
SERIALIZABLE
非常具有攻击性,因此如果您无法将其更改为
READ_COMMITTED
,您需要接受在某些情况下您的作业可能无法启动。