![](/img/trans.png)
[英]How to pass parameters from ItemReader to ItemProcessor in spring-batch?
[英]How to pass parameters from spring boot to spring batch
我搜索了如何将 springboot 参数传递给我的 spring 批处理作业的解决方案,然后在我的 writer 中获取参数的值。 当我在我的作家中加载密钥时仍然为空。 有人可以帮我吗?
@GetMapping("/load/{id}")
public BatchStatus load (@PathVariable String id) throws
JobExecutionException {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.addString("key", id).toJobParameters();
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
return jobExecution.getStatus();
}
这是我的批处理代码配置
@Configuration
@EnableBatchProcessing 公共类 BatchConfig {
@Value("${path.to.react.file}")
private Resource resource;
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
UserDao userDao;
@Value("#{jobParameters['key']}")
private String pathToFile;
@Bean
public Job job() {
return jobBuilderFactory.get("readCSVFilesJob")
.incrementer(new RunIdIncrementer())
.start(step())
.build();
}
@Bean
public Step step() {
return stepBuilderFactory.get("step1").<UserDTO,
UserDTO>chunk(100)
.reader(Reader.reader(resource))
.processor(new Processor())
.writer(new Writer(userDao))
.build();
}
}
还有我的作家
@StepScope
public class Writer implements ItemWriter<UserDTO> {
private UserDao userDao;
@Value("#{jobParameters['key']}")
private String key;
public Writer(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void write(List<? extends UserDTO> items) throws Exception {
userDao.writePnoFile(items);
}
}
将@Scope("step")
添加到您的@Value
,然后通过@Value
注释注入参数:
@Value("#{jobParameters['key']}")
String key;
您的示例不起作用导致您实例化您的作家
.writer(new Writer(userDao))
然后,您所有的注释都变得毫无用处(@Stepcope、@Values ...)。 您需要通过在配置的 writer 字段上使用 @Autowired 来让 spring 为您实例化它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.