我有一个 Spring Batch 项目,其中有 JsonResouurceAsyncPagingItemReader
,这是一个自定义 ItemReader
,它从 Web 服务异步检索数据。
此自定义 ItemReader
使用 ExecutorService
提交对 Web 服务的调用。但是我在初始化它时遇到了麻烦。
我尝试通过 AbstractItemCountingItemStreamItemReader
提供的 doOpen
方法初始化它,但是似乎 doOpen
它没有被调用。
Spring 通过以下方式注入(inject) ItemReader
:
@Bean
@JobScope
public ItemReader<Map<String, Object>> reader(@Value("#{jobParameters['lastRun']}") Date lastRun,
@Value("#{jobParameters['codInt']}") Long codInt) {
Map<String, Object> parameterValues = new HashMap<String, Object>();
if (lastRun != null) {
parameterValues.put("lastRun", DateFormatUtils.format(lastRun, dateFormat));
}
if (codInt != null) {
parameterValues.put("codInt", codInt);
}
JsonResourceAsyncPagingItemReader<Map<String, Object>> reader = new JsonResourceAsyncPagingItemReader<>();
reader.setHttpUrl(server + pathTemplate);
reader.setRestTemplate(restTemplate);
reader.setParameterValues(parameterValues);
reader.setPageSize(pageSize);
return reader;
}
并进一步在Step
中使用,如下所示:
@Bean
public Step importProductStep() {
return stepBuilderFactory.get("importProductJobStep")
.<Map<String, Object>, Product>chunk(1000)
.reader(reader(null, null))
.processor(processor())
.writer(writer())
.build();
}
知道可能出了什么问题吗?
最佳答案
如果您返回一个 ItemStream 或一个 ItemStreamWriter,那就应该没问题。
(Look at this ticket)
关于java - Spring Batch 自定义 ItemReader 无法打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353114/