【发布时间】:2017-01-15 09:21:49
【问题描述】:
我是春季批次的新手。我在spring batch中需要完成的任务如下:
- 需要从数据库中读取一些元数据。
- 基于这个元数据,我需要读取一些文件。
- 经过一些处理,需要将这些值从文件写入数据库。
我的查询如下:
一个。对于第一个要求,我需要将整个结果集映射到单个对象,其中与人员相关的数据在 1 个表中,与宠物相关的数据在另一个表中,并通过人员 ID 连接。
public class PersonPetDetails {
private String personName;
private String personAddr;
private int personAge;
private List<Pet> pets;
为此,我编写了一个自定义项目阅读器,它扩展了 JdbcCursorItemReader。
public class CustomJDBCCusrorItemReader<T> extends JdbcCursorItemReader<T> {
private ResultSetExtractor<T> resultSetExtractor;
public void setResultSetExtractor(ResultSetExtractor<T> resultSetExtractor) {
this.resultSetExtractor = resultSetExtractor;
}
@Override
public void afterPropertiesSet() throws Exception {
setVerifyCursorPosition(false);
Assert.notNull(getDataSource(), "DataSource must be provided");
Assert.notNull(getSql(), "The SQL query must be provided");
Assert.notNull(resultSetExtractor, "ResultSetExtractor must be provided");
}
@Override
protected T readCursor(ResultSet rs, int currentRow) throws SQLException {
return resultSetExtractor.extractData(rs);
}
}
这是实现我的要求的正确方法吗?还是有更好的方法?
b. AFAIK,在春季批次中,只有一个读者,没有一个作家,就不可能有一步。因此,我不能在工作的不同步骤中调用另一组读者。那么,如何一步调用多个阅读器呢?
c。另外,根据某些情况,我可能需要调用第三组 Reader。如何在一个步骤中有条件地调用读者?
感谢您浏览我的帖子。我知道它很长。任何帮助深表感谢。另外,我想一个示例代码 sn-p 将帮助我更好地理解这一点。 :)
【问题讨论】:
-
我的第一个建议是将您的问题分成多个问题,因为点 a) b) 和 c) 完全不相关。 a) 可以使用通过扩展的委托来解决 b) 在某些情况下可以使用多个读取器(例如stackoverflow.com/questions/21304364/…) c) SB 中的条件使用 JobExecutionDecider 解决
标签: java spring-batch