Spring boot Spring批处理:如何在没有序列化错误的情况下管理第一次加载?
在第一次加载时,在创建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
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
,您需要接受在某些情况下您的作业可能无法启动。