当前位置: 首页 > 知识库问答 >
问题:

如何将参数从spring boot传递到spring batch

奚瑾瑜
2023-03-14

我搜索如何将springboot参数传递给spring批处理作业的解决方案,然后在我的Writer中获得参数的值。当我在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
    @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);
}

}

共有1个答案

巩镜
2023-03-14

@scope(“step”)添加到编写器中,然后通过@value注释注入参数:

@Value("#{jobParameters['key']}")
String key;
 类似资料:
  • 问题内容: 我已经编写了这个jQuery ajax方法,在下面调用了webmethod。除了作为用户对象的参数具有空字段之外,调用进行得很好。我在调试时可以在firebug中看到值,但它们无法通过webmethod中的User对象参数 我试图从jQuery方法传递给Webmethod的两个值是“ UserID”(Guid)和“ About”(字符串),它们都是User类的属性,但在服务端,是Use

  • ...下面的类是骆驼处理器,它最终被调用: 我知道Apache CXF使用的Exchange类与Camel使用的Exchange不同,但是这两种集成技术之间应该有一种传递信息的方式?

  • 我试图将一个参数从命令行传递到java类。我关注了这篇文章:http://gradle.1045684.n5.nabble.com/gradle-application-plugin-question-td5539555.html,但是代码对我来说不起作用(也许它不适合JavaExec?)。以下是我所尝试的: 上面硬编码的args值的输出是: 任何关于如何将命令行参数传递给gradle的指针都很感

  • 问题内容: 我想将值传递给javascript。如果可能的话,我该怎么办?如何在后备bean中接收它们? 问题答案:

  • 问题内容: 我们已经设置了一些参数来在Jenkins中执行构建(使用简单的“参数化构建”设置)。作业被设置为Maven测试。有没有办法以编程方式将这些参数传递到我们的Java代码中?我们需要基于通过Jenkins设置的参数来执行某些更新功能。 问题答案: 是的,您可以通过Maven执行将Jenkins参数传递给Java代码,如下所示: 请注意, $ JOB_PARAM_1 将捕获Jenkins上设

  • 问题内容: 我有3个版本:A-是控制流量的主版本B-注释者版本C- 将在BI要向A添加String参数后执行,因此用户将手动输入一些String,但我不确定如何我可以将此参数传递给B吗?可以说这是我的构建流程: build(“ B”)build(“ C”)我不知道如何将参数传递到B,我应该从构建流程还是从B构建配置中做到这一点,我该怎么做。 预先感谢亚历克斯 问题答案: 像这样: https://