正如 MattC 所指出的,当我ItemProcessor
被窃听时,我遇到了这个错误。出于某种原因,在我的处理器活动期间,它正在关闭与 的数据源连接jobrepository
,所以我的例外是:
Encountered an error saving batch meta data for step step1 in job myjob. This job is now in an unknown state and should not be restarted.
org.springframework.dao.OptimisticLockingFailureException: Attempt to update step execution id=1 with wrong version (1), where current version is 2
在堆栈跟踪结束时,我能够找到:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection is closed.
为了确定问题,首先我隔离了阶段。我构造了一个 NoOpProcessor 和一个 NoOpItemWriter。调整了tasklet,它运行良好。所以我的问题不在于读者。
然后我回滚到我的“完整”ItemWriter 实现,它再次运行良好。所以我的问题不在于作者。当我启用我的“完整”处理器时,错误再次发生。所以,错误就在其中,我开始调试。
所以,不幸的是,我的回答是:调试...
public class NoOpProcessor implements ItemProcessor<Object, Object> {
@Override
public Object process(Object arg0) throws Exception {
System.out.println("Input object: " + Objects.toString(arg0));
return arg0;
}
}
public class NoOpItemWriter implements ItemWriter<Object> {
@Override
public void write(List<? extends Object> items) throws Exception {
if (items != null) {
System.out.println("Qtty of items to be written: " + items.size());
for (Object obj : items) {
System.out.println(Objects.toString(obj));
}
} else {
System.out.println("The items list is null. Nothing to be written.");
}
}
}