这是我的代码,我不知道为什么我的bean MouvementToMapItemProcessor
没有注入,它在构造函数中始终为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时出错 . 要显示自动配置报告,请在启用“debug”的情况下重新运行应用程序 . 11:55:29.139 [restartedMain]错误osboot.SpringApplication - 应用程序启动失败org.springframework.beans.factory.BeanCreationException:在类路径资源中定义名为'mouvementMapReader'的bean时出错[fr / gouv / justice / spark / fileToBaseBatch /BatchConfiguration.class]:通过工厂方法的Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.batch.item.ItemReader]:工厂方法'mouvementMapReader'抛出异常;嵌套异常是org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)中的java.lang.NullPointerException,位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)在org.springframework.beans.factory .support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(在org.springfra上的DefaultSingletonBeanRegistry.java:230) mework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)位于org.springframework.beans.factory.support的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) . 位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)的org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)中的DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) .springframework.boot.SpringApplication.refresh(SpringApplication.java:693)org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)位于or.g.springframework.boot.SpringApplication.run(SpringApplication.java:1107)的fr.gouv.justice.sp ark.fileToBaseBatch.Application.main(Application.java:18)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43)atg.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)中的java.lang.reflect.Method.invoke(Method.java:498)引起:org.springframework .beans.BeanInstantiationException:无法实例化[org.springframework.batch.item.ItemReader]:工厂方法'mouvementMapReader'引发异常;嵌套异常是org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)中的java.lang.NullPointerException,位于org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ...省略了22个常见帧引起:java.lang.NullPointerException:在fr.gouv.justice.spark.fileToBaseBatch的fr.gouv.justice.spark.fileToBaseBatch.readers.InMemoryMouvementReader . (InMemoryMouvementReader.java:19)中为null . BatchConfiguration.mouvementMapReader(BatchConfiguration.java:74)at fr.gouv.justice.spark.fileToBaseBatch.BatchConfiguration $$ EnhancerBySpringCGLIB $$ e3e5804e.CGLIB $ mouvementMapReader $ 34()at fr.gouv.justice.spark.fileToBaseBatch.BatchConfiguration $$ EnhancerBySpringCGLIB $$ e3e5804e $$ FastClassBySpringCGLIB $$ 8f516405.invoke()at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)atorg.springframework.context.annotation.ConfigurationClassEnhancer $ BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358)at fr.gouv.justice.spark.fileToBaseBatch.BatchConfiguration $$ EnhancerBySpringCGLIB $$ e3e5804e.mouvementMapReader()at sun.reflect.NativeMethodAccessorImpl.invoke0 (本地方法)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498) )org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)...省略了23个常用帧
1 回答
你的
MouvementToMapItemProcessor
在构造之前没有被注入InMemoryMouvementReader
,这是导致构造函数失败并出现NullPointerException的原因 . 请改用构造函数注入:和
和