As pointed out by MattC, I had this error when my ItemProcessor
was bugged. For some reason, during my processor activities, it was closing the datasource connection with jobrepository
, so my exception was:
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
At the end of the stacktrace, I was able to find:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection is closed.
In order to identify the problem, first I isolate the phase. I constructed a NoOpProcessor and a NoOpItemWriter. Adjusted the tasklet and it worked well. So my problem wasn't into the reader.
Then I rolledback to my "full" ItemWriter implementation, and again, it worked well. So my problem wasn't with the writer to. When I enabled my "full" processor, the error occurred again. So, the error was in it, and I started debugging.
So, unfortunately, my answer is: debug...
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.");
}
}
}