Thanks for the quick reply Dave,

Originally Posted by
Dave Syer
Clarification: the failure exceptions and stacktrace you are looking for are in the step execution (not the job execution).
There is one exception on the step execution and it is the SkipLimitExceededException
Code:
[StepExecution: id=0, name=loadFile, status=FAILED, exitStatus=FAILED, readCount=0, filterCount=0, writeCount=0 readSkipCount=10, writeSkipCount=0, processSkipCount=0, commitCount=0, rollbackCount=1, exitDescription=org.springframework.batch.core.step.skip.SkipLimitExceededException: Skip limit of '10' exceeded

Originally Posted by
Dave Syer
I don't see where you are setting the ExitStatus to "COMPLETED WITH SKIPS",
This may be a direction in which I was going wrong. I was following on from the skipSampleJob in the samples. Do I need to have a JobExecutionDecider, like the SkipCheckingDecider? If I use that pattern, will COMPLETED WITH SKIPS be the outcome if the skip limit is exceeded?

Originally Posted by
Dave Syer
There are definitely unit tests asserting that skip listeners get called in the right place, so we need to understand your implementation a bit better.
Can you point me in the direction of the unit tests you are thinking of? I'll check them out and setup a test case to explain my implementation.

Originally Posted by
Dave Syer
Are we sure that your Tasklet is being converted to a listener correctly?
Yup, it works perfectly when the skip limit is not being exceeded.

Originally Posted by
Dave Syer
What makes you so sure that postProcess method on FaultTolerantChunkProvider is not being called (since it is in the unit tests)?
When I put a breakpoint on the postProcess method when the skip-limit is exceeded, it doesn't get hit.
In the meantime, I've upgraded to 2.0.4 and I'll have a look at the JobExecutionDecider pattern to see if that will work.
Hopefully, I can get a unit test working that I can send through to demonstrate the use case.
By the way, I was storing the skips on the execution context so I can get a hold of them through the jobExecution.