我有一个 Spring Batch 项目,其中有一个从 Web 服务异步检索数据的JsonResouurceAsyncPagingItemReader自定义项目。ItemReader
此自定义ItemReader使用 aExecutorService来提交对 Web 服务的调用。但是我在初始化它时遇到了麻烦。
我尝试通过doOpen提供的方法初始化它AbstractItemCountingItemStreamItemReader,但似乎doOpen没有被调用。
ItemReaderSpring 通过以下方式注入:
@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;
}
Run Code Online (Sandbox Code Playgroud)
并进一步用于Step …
我有一个包含地址列表的 Person 对象。我的 Spring Batch 应用程序将 Person JSON 记录转换为 Person POJO 并将它们写入数据库。
通常,我会使用 JdbcBatchItemWriter,但我发现它仅限于写入 2 个单独的表。我需要写入人员和地址表。
Hibernate 可以一步完成此操作,但我在 Spring Bathc 中没有看到类似的功能。
这个SO问题Multiple itemwriters in Spring Batch建议使用CompositeItemWriter,但问题是,我希望我的Address表包含一个名为Person_id的列,以将地址链接回Person。我无法通过两次写入来做到这一点。
有什么建议么?当然,Batch 可以满足更复杂的写入需求
I\xe2\x80\x99m 使用 \xe2\x80\x98FlatFileItemReader\xe2\x80\x99 来处理文件。我也想读带有 # 的行。目前,它只是跳过线路。
\n我想知道,是否建议使用这种方式来使用 jpa 实现读者 spring 批处理,或者是否最好寻找另一种解决方案,如果不建议使用这种方式,我在哪里可以找到有关更好选项的信息
public class CreditCardItemReader implements ItemReader<CreditCard> {
@Autowired
private CreditCardRepository respository;
private Iterator<CreditCard> usersIterator;
@BeforeStep
public void before(StepExecution stepExecution) {
usersIterator = respository.someQuery().iterator();
}
@Override
public CreditCard read() {
if (usersIterator != null && usersIterator.hasNext()) {
return usersIterator.next();
} else {
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我使用以下教程使用 spring boot 创建了一个 spring 批处理作业:
https://spring.io/guides/gs/batch-processing/
Run Code Online (Sandbox Code Playgroud)
该作业正在按预期读取文件并写入数据库。
但是,现在我有一个用例可以多次运行此作业。
我有一个ArrayList参数。
我应该对工作进行哪些更改,以便我可以运行工作的次数是我的ArrayList?