【问题标题】:How to pass parameters from spring boot to spring batch如何将参数从 Spring Boot 传递到 Spring Batch
【发布时间】: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


【解决方案1】:

您的示例不起作用,因为您实例化了您的作家

.writer(new Writer(userDao))

然后,您的所有注释都变得无用(@Stepcope、@Values ...)。 您需要在配置的 writer 字段上使用 @Autowired 让 spring 为您实例化它。

【讨论】:

    【解决方案2】:

    @Scope("step") 添加到您的编写器,然后通过@Value 注解注入参数:

    @Value("#{jobParameters['key']}")
    String key;
    

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2016-04-20
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2018-06-18
      相关资源
      最近更新 更多