java - 在第二个阅读器中使用第一个阅读器的输出
问题描述
我正在使用阅读器将 a 存储RequestDto
在上下文中:
public class ItemReaderStoredData implements ItemReader<List<RequestDto>> {
private List<RequestDto> requestListDto = new ArrayList<>();
@BeforeStep
public void retrieveInterStepData(StepExecution stepExecution) {
JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
this.requestListDto = (List<RequestDto>)jobContext.get("directRequestListDto");
}
@Override
public List<RequestDto> read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
return requestListDto;
}
}
uuid
我想通过调整来检查数据库中RequestDto
列表中的每一个是否存在,cursorItemReader
在stepConfig
. 目的是将非冗余项写入文件。
@Bean
public JdbcCursorItemReader<HistoricDto> cursorItemReader() {
JdbcCursorItemReader<HistoricDto> reader = new JdbcCursorItemReader();
reader.setSql("select * from tab");
reader.setDataSource(this.dataSource);
reader.setRowMapper(new TableMapperDto());
return reader;
}
如何在同一步骤中在阅读器二中使用阅读器一的输出?或者是否可以将两个代码合并到一个单独的类中?
编辑:我正在考虑将两者合并:将其放入JdbcCursorItemReader
一个单独的类@BeforeStep
中ItemReaderStoredData
可以解决我的问题。但我有问题Datasource
Error
which is Null
。以这种方式合并它们是否安全以及如何做到这一点?
解决方案
不建议在执行上下文中存储项目列表,因为它在块/步骤边界处持久保存(这在性能方面可能很昂贵)。
我想读取 xlsx 文件(输入),填充 DTO,检查数据库中的冗余,过滤我的 DTO 列表,写入 aa file1 新项目(或数据库)并将冗余项目记录在 file2'(输出)中。
有几种方法可以实现这一点,而不必将项目存储在列表中并通过执行上下文共享它们。这里有几个选项:
- 选项 1:使用项目处理器过滤掉现有项目。现有项目可以使用
ItemProcessListener
. 不存在的项目不会被处理器过滤,并且可以使用步骤的项目编写器写入数据库。 - 选项 2:与选项 1 相同,但使用 a
SkipListener
而不是 aItemProcessListener
。在这种情况下,处理器会为现有项目(应声明为可跳过)抛出异常,而不是null
为现有项目返回(即过滤它们)。 - 选项 3:使用项目处理器进行检查并将项目标记为存在与否。
ClassifierCompositeItemWriter
然后可以使用A对项目进行分类并在适当的地方编写它们。
还有其他技术,例如将文件加载到临时表中并在两个表之间进行比较,但这些技术取决于用例(输入大小、比较逻辑等)。
推荐阅读
- c# - 如何处理这些实体..?
- wordpress - 如何部署使用 webpack 进行捆绑的 WordPress 主题?
- git - 无法确定此“dev.azure.com”远程 URL 的组织名称
- r - 如何在不使用内置 R 函数的情况下计算向量的均值/标准差?
- arrays - 具有递归问题的完整搜索/蛮力
- javascript - 使用 Apache Cordova 和 https://weatherwidget.io/ 根据点击显示天气小部件?
- python - 如何更改位置为 2 的倍数的所有字母?
- javascript - 为什么我收到 InvalidArgumentError: H.Map (Argument #0 [object Object])
- google-chrome - 用户数据文件夹中有什么?
- python - Django Python错误:找不到带有参数'('',)'的'用户帖子'的反向