今天遇到一个奇怪的问题,在一个step里有一个chunk,还有一个step的listener,这个listener实际上是一个headerCallback,这个headerCallback里面有一个@beforeStep方法和一个writerHeader方法:
@BeforeStep public void beforeStep(StepExecution stepExecution) { this.stepExecution = stepExecution; } @Override public void writeHeader(Writer writer) throws IOException { //略 }
然后在chunk的writer里面,也引用了这个类:
<bean id="trustActBatTrsFileWriter" class="org.springframework.batch.item.support.CompositeItemWriter" scope="step"> <property name="delegates"> <list> <bean class="org.springframework.batch.item.file.FlatFileItemWriter"> <property name="resource" value="file:#{jobParameters[uploadFilePath]}#{jobParameters[uploadFileName]}.txt" /> <property name="lineAggregator"> <bean class="com.csii.bank.core.batch.support.writer.PrefixSuffixDelimitedLineAggregator"> <property name="delimiter" value="|" /> <property name="delimiterAsSuffix" value="false" /> <property name="fieldExtractor"> <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor"> <property name="names" value="略" /> </bean> </property> </bean> </property> <property name="headerCallback" ref="trustActBatPayHeaderCallback"/> </bean> </list> </property> </bean>
然后我发现这个JOB执行的时候,一上来就执行了这个trustActBatPayHeaderCallback的@beforeStep方法,这很正常,因为他是step级别的监听器,而且是@beforeStep,但是,reader一结束立马就执行了,,立马又执行了writeHeader方法,,居然是在processor之前,颠覆了我的认知,
时间: 2024-10-10 11:22:12