繁体   English   中英

如何将参数从 spring boot 传递到 spring 批处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM