java - 在 Spring Batch 应用程序中自定义步骤的参数
问题描述
我正在使用 Spring Batch(使用 Spring Boot)。我的要求是从数据库读取数据,处理它(验证和东西)并将其写入文件。我正在尝试使用批处理步骤来实现这一目标。
问题是,如果我定义一个步骤,阅读器、处理器和编写器应该具有相似的参数。(从我看到的示例和我得到的错误)就像我的阅读器返回一个 db 域对象,处理器和编写器应该有域对象参数。
我正在寻找的是,读者应该返回域对象,处理器应该接收域对象并将其转换为 dto/pojo(在验证和数据转换之后)并返回 dto 对象。Writer 应该接收 dto 对象并将其写入文件。
请让我知道这是否可能在单个批处理步骤中具有不同类型的参数。如果是这样,请给我任何示例/链接。
解决方案
转换项目是项目处理器的典型用例。这是文档的ItemProcessor部分的摘录:
ItemProcessor 很简单。给定一个对象,转换它并返回另一个。提供的对象可能是也可能不是同一类型
因此,在您的情况下,阅读器可以将由项目处理器转换为 DTO 的域对象返回。然后编写器将获取 DTO 并将它们写入文件。这是一个将数字转换为字符串的简单示例:
@Bean
public ItemReader<Integer> itemReader() {
return new ListItemReader<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
}
@Bean
public ItemProcessor<Integer, String> itemProcessor() {
return item -> "foo" + item;
}
@Bean
public ItemWriter<String> itemWriter() {
return items -> {
for (String item : items) {
System.out.println("item = " + item);
}
};
}
@Bean
public Step step() {
return stepBuilderFactory.get("step")
.<Integer, String>chunk(5)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build();
}
推荐阅读
- angular - Angular 4路由器第一个加载路由不起作用
- php - PHP $xpath->查询循环
- vb.net - lambda 表达式中的子声明不起作用
- gutenberg-blocks - Gutenberg Block Development:只保存一个 RichText 内容
- php - 将 PHP 中的引导分页限制为 5 页
- java - 用户输入的数组大小和元素
- php - 通过 CLI 为新产品创建新的 WooCommerce 类别
- java - JPQL - 使用过滤器连接查询
- r - R:如何对某个 ID 的前值进行计数/求和?
- angular - Angular 6:在新的类构造函数中提供 func