这是我的代码,我不知道为什么我的 beanMouvementToMapItemProcessor
没有被注入,它在构造函数中总是 null
@Autowired
private MouvementToMapItemProcessor mvts;
private Iterator it;
public InMemoryMouvementReader() {
it = mvts.getMouvmentFileRowMap().entrySet().iterator();
}
这是我的配置类:
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
public BatchConfiguration() {
}
@Bean
public ItemReader<MouvementFileRow> mouvementMapReader() {
return new InMemoryMouvementReader();
}
@Bean
public ItemProcessor<MouvementFileRow, MouvementFileRow> mouvementMapProcessor() {
return new MouvementToMapItemProcessor();
}
@Bean
public Step generateDemmandeCommunication() {
return stepBuilderFactory.get("generateDemmandeCommunication")
.<MouvementFileRow, DemandeCommunication>chunk(10)
.faultTolerant().skipLimit(Integer.MAX_VALUE).skip(CustomReaderSkipException.class)
.reader(mouvementMapReader())
.processor(mouvementProcessor())
.writer(demandeCommunicationItemWriter())
.listener(customStepListener())
.build();
}
public class InMemoryMouvementReader implements ItemReader<MouvementFileRow> {
@Autowired
private MouvementToMapItemProcessor mvts;
private Iterator it;
public InMemoryMouvementReader() {
it = mvts.getMouvmentFileRowMap().entrySet().iterator();
}
private void initialize() {
}
@Override
public MouvementFileRow read() throws Exception {
if (it.hasNext()) {
return mvts.getMouvmentFileRowMap().get(it.next());
} else return null;
}
}
@Component
public class MouvementToMapItemProcessor implements ItemProcessor<MouvementFileRow, MouvementFileRow> {
private static final Logger log = LoggerFactory.getLogger(MouvementToMapItemProcessor.class);
private Map<Long, MouvementFileRow> mouvmentFileRowMap;
public MouvementToMapItemProcessor() {
mouvmentFileRowMap = new HashMap<Long, MouvementFileRow>();
}
@Override
public MouvementFileRow process(final MouvementFileRow mouvement) throws Exception {
........
return null;
}
public Map<Long, MouvementFileRow> getMouvmentFileRowMap() {
return mouvmentFileRowMap;
}
我的堆栈跟踪
启动 ApplicationContext 时出错。要显示自动配置报告,请在启用“调试”的情况下重新运行您的应用程序。11:55:29.139 [restartedMain] 错误 osboot.SpringApplication - 应用程序启动失败 org.springframework.beans.factory.BeanCreationException:在类路径资源 [fr/gouv/justice/spark/fileToBaseBatch/ 中定义名称为“mouvementMapReader”的 bean 创建错误BatchConfiguration.class]:通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.batch.item.ItemReader]:工厂方法“mouvementMapReader”抛出异常;嵌套异常是 org.springframework.beans.factory.support.ConstructorResolver 中的 java.lang.NullPointerException。org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.batch.item.ItemReader]:工厂方法'mouvementMapReader'抛出异常;嵌套异常是 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 的 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 的 java.lang.NullPointerException ...省略了 22 个常见帧 原因:java.lang.NullPointerException: null at fr.gouv.justice.spark.fileToBaseBatch.readers.InMemoryMouvementReader.(InMemoryMouvementReader.java:19) at fr.gouv.justice.spark.fileToBaseBatch。 BatchConfiguration.mouvementMapReader(BatchConfiguration.java:74) 在 fr.gouv.justice。