I could use scope="step"
in xml configuration without any issue, but if use it as annotation as below
. it throws the following error
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'step1' defined in class path resource [BatchConfiguration.class]: Unsatisfied dependency expressed through constructor argument with index 1 of type [org.springframework.batch.item.ItemReader]: : Error creating bean with name 'reader': Scope 'step' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No context holder available for step scope; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'reader': Scope 'step' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No context holder available for step scope
The main point is:
Scope 'step' is not active for the current thread;
what's the root cause?
public class BatchConfiguration {
@Bean
@Scope("step")
public ItemReader<Source> reader(@Value("#{jobParameters['fileName']}") String fileName) {
System.out.println("*****************************");
System.out.println("read file of "+fileName);
System.out.println("*****************************");
FlatFileItemReader<Source> reader = new FlatFileItemReader<Source>();
reader.setResource(new FileSystemResource(fileName));
reader.setLineMapper(new DefaultLineMapper<Source>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[] { "firstName", "lastName" });
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Source>() {{
setTargetType(Source.class);
}});
}});
return reader;
}
You need to use either of below to two ways available
@Scope(value="step",
proxyMode=TARGET_CLASS)
Or
@Bean
@StepScope
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With