gpt4 book ai didi

java - Spring Batch - 如何使用从 REST API 请求收到的文件名启 Action 业

转载 作者:行者123 更新时间:2023-12-02 04:30:46 27 4
gpt4 key购买 nike

我正在尝试公开 Rest API 并使用它来接收文件名参数并使用它启动 Spring Batch 作业。

我希望每个请求都能启动该作业,并希望我的 ItemReader 查找该文件名。

我已经阅读了一些有关如何通过 Rest API 启 Action 业以及 ItemReader 如何访问 jobParameters 的其他问题,但找不到从 API 请求接收参数的方法。下面是我的代码:

@Configuration
public class BatchConfig {

@Autowired
public JobBuilderFactory jobBuilderFactory;

@Autowired
public StepBuilderFactory stepBuilderFactory;

private static final String WILL_BE_INJECTED = null;

@Bean
public Job processJob() {
return jobBuilderFactory.get("myJobName")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}

@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Foo, Foo> chunk(1)
.reader(excelReader(WILL_BE_INJECTED))
.processor(new Processor()).faultTolerant().skipPolicy(skip())
.writer(new Writer())
.build();
}

@Bean
@StepScope
ItemReader<Foo> excelReader(@Value("#{jobParameters['fileName']}") String fileName) {
PoiItemReader<Foo> reader = new PoiItemReader<>();
reader.setLinesToSkip(3);
reader.setResource(new ClassPathResource("data/" + fileName));
reader.setRowMapper(excelRowMapper());
return reader;
}

private RowMapper<Foo> excelRowMapper() {
return new FooExcelRowMapper();
}

@Bean
public SkipPolicy skip() {
return new SkipPolicies();
}

}

还有我的 Controller :

@RestController
public class BatchResource {

private final JobLauncher jobLauncher;

private final Job job;

public BatchResource(JobLauncher jobLauncher, Job job) {
this.jobLauncher = jobLauncher;
this.job = job;
}

@PostMapping
public void launchJob(@RequestParam(value = "file_name", required = true) final String fileName) throws Exception {
final JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
jobParametersBuilder.addString("fileName", fileName);

final JobParameters jobParameters = jobParametersBuilder.toJobParameters();

jobLauncher.run(job, jobParameters);
}
}

不幸的是,ItemReader 似乎无法理解要读取的文件名。该作业“成功”运行,但实际上并未读取我的输入文件。

编辑:我出于同样的目的开始了一个新项目,并注意到一旦我使用 @StepScope 注释,它就会停止工作并且不再工作,即使我删除 @StepScope 注释。现在我正在想办法克服这个问题

最佳答案

经过一些调试,我注意到当我开始使用 @StepScope 时,我用来读取 Excel 文件的 ItemReader 实现 ( https://github.com/spring-projects/spring-batch-extensions/tree/master/spring-batch-excel ) 无法读取 Excel 文件。注释。

所以我发现了这个问题PoiItemReader with StepScope Annotation do not read Excel file由 Niraj Sonawane 回答。

基本上我必须将返回类型从 ItemReader<Foo> 更改为至PoiItemReader<Foo>如下:

@Bean
@StepScope
PoiItemReader<Foo> excelReader(@Value("#{jobParameters['fileName']}") String fileName) {
PoiItemReader<Foo> reader = new PoiItemReader<>();
reader.setLinesToSkip(3);
reader.setResource(new ClassPathResource("data/" + fileName));
reader.setRowMapper(excelRowMapper());
return reader;
}

关于java - Spring Batch - 如何使用从 REST API 请求收到的文件名启 Action 业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56586465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com