【发布时间】:2019-09-27 12:20:09
【问题描述】:
我搜索了如何将 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
public class 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);
}
}
【问题讨论】:
-
在此处查看如何在项目读取器/写入器中绑定作业参数:docs.spring.io/spring-batch/4.1.x/reference/html/…
-
感谢您的回复。我测试了集成注释@StepScope。但它不起作用。我更新了我的代码,你能帮帮我吗?
-
您需要添加
@Component否则您的编写器将不会被声明为spring bean并且不会应用步骤范围。 -
是的,我已经尝试过这样做,但还是一样。 :(
标签: java spring-boot spring-batch