From boot Spring 批量申请ItemWriter的@BeforeStep方法调用之前的ItemProcessor的@BeforeStep方法
From boot Spring Batch application @BeforeStep method of the ItemWriter calling before of @BeforeStep method of the ItemProcessor
我正在研究 Spring批处理,我在引导期间遇到问题 Spring 在 ItemProcessor 之前调用 ItemWriter。为什么?
public class PollingReader implements ItemReader<File> {
@BeforeStep
public void beforeStep(StepExecution stepExecution) throws NotDirectoryException {..}
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution) {..}
}
public class PollingWriter implements ItemWriter<File> {
@BeforeStep
public void beforeStep(StepExecution stepExecution) {..}
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution) {..}
..
}
public class PollingProcessor implements ItemProcessor<File, File> {
@BeforeStep
public void beforeStep(StepExecution stepExecution) {..}
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution) {..}
}
并且@AfterStep ItemProcessor 的方法在方法@AfterStep ItemWriter 之前被调用。
我预计这个循环调用@BeforeStep:
- ItemReader
- 物品处理器
- ItemWriter
但我得到了这个结果:
- ItemReader
- ItemWriter
- 物品处理器
对于@AfterStep,我预计:
- ItemWriter
- 物品处理器
- ItemReader.
但我得到了这个结果:
- 物品处理器
- ItemWriter
- ItemReader
谢谢:)
您的对象是多态的:它们都是项目 reader/processor/writer 和 StepExecutionListener
(更准确地说,作为代理)。当 Spring Batch 运行 StepExecutionListeners before/after 一个步骤时,它不会将它们视为 reader/processor/writer,并且它们的执行顺序不一定与在面向块的步骤中调用它们的顺序相同(实际上,在那种情况下顺序是未定义的)。
我正在研究 Spring批处理,我在引导期间遇到问题 Spring 在 ItemProcessor 之前调用 ItemWriter。为什么?
public class PollingReader implements ItemReader<File> {
@BeforeStep
public void beforeStep(StepExecution stepExecution) throws NotDirectoryException {..}
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution) {..}
}
public class PollingWriter implements ItemWriter<File> {
@BeforeStep
public void beforeStep(StepExecution stepExecution) {..}
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution) {..}
..
}
public class PollingProcessor implements ItemProcessor<File, File> {
@BeforeStep
public void beforeStep(StepExecution stepExecution) {..}
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution) {..}
}
并且@AfterStep ItemProcessor 的方法在方法@AfterStep ItemWriter 之前被调用。
我预计这个循环调用@BeforeStep:
- ItemReader
- 物品处理器
- ItemWriter
但我得到了这个结果:
- ItemReader
- ItemWriter
- 物品处理器
对于@AfterStep,我预计:
- ItemWriter
- 物品处理器
- ItemReader.
但我得到了这个结果:
- 物品处理器
- ItemWriter
- ItemReader
谢谢:)
您的对象是多态的:它们都是项目 reader/processor/writer 和 StepExecutionListener
(更准确地说,作为代理)。当 Spring Batch 运行 StepExecutionListeners before/after 一个步骤时,它不会将它们视为 reader/processor/writer,并且它们的执行顺序不一定与在面向块的步骤中调用它们的顺序相同(实际上,在那种情况下顺序是未定义的)。