spring-batch - Spring Batch - 映射和写入 1-> 多行
问题描述
我有一个看起来像这样的电子表格...
US LC US MC
40 55.39 3.26
39 54.39 1.26
这是它的 POJO:
@Data
public class ExcelObject {
private BigDecimal timePeriod;
private BigDecimal usLc;
private BigDecimal usMc;
}
我需要像这样转换这张表并将其保存到数据库中......
TIME_PERIOD, LABEL, ALLOCATION
40, "US LC", 55.39
40, "US MC", 3.26
39, "US LC", 54.39
39, "US MC", 1.26
这是转换后的 POJO ExcelObject
:
@Data
public class ExcelItem {
private BigDecimal timePeriod;
private String label;
private BigDecimal allocation;
}
完成此转换的最佳 Spring Batch 策略是什么?我有一个行映射器来映射电子表格中的数据。我想在我的处理器中进行转换。但是如何从处理器返回 4 个结果并写入 4 行?谢谢。
解决方案
实现一个ItemReader
阅读ExcelObject
:
public class MyItemReader implements ItemReader<ExcelObject> {
@Override
ExcelObject read() {
}
}
然后 aItemProcessor
转换ExcelObject
为 a List<ExcelItem>
:
public class MyItemProcessor implements ItemProcessor<ExcelObject,List<ExcelItem>> {
@Override
List<ExcelItem> process(ExcelObject){
}
}
最后,一个ItemWriter
来写List<ExcelItem>
。在 writer 中,您可以循环项目并重用 spring-batch 提供的现有项目ItemWriter
并委托给它来编写项目,例如:
public class MyItemWriter implements ItemWriter<List<ExcelItem>> {
@Autowired
private JdbcBatchItemWriter<ExcelItem> jdbcWriter;
@Override
public void write(List<List<ExcelItem>> items) throws Exception {
for(List<ExcelItem> item : items){
jdbcWriter.writer(item);
}
}
}
推荐阅读
- android - 将我的 EditText 输入转换为可观察的流
- sql - 计算变量属性的问题
- java - RequestFocus 和 ReqeustFocusFromTouch 的区别?
- android - 如何从 admob 添加 NATIVE 广告?
- push-notification - 使用 PHP 发送推送通知
- ios - 隐藏视图及其全部内部视图
- mapkit - 在地图中包裹纬度和经度时崩溃
- java - 通过点击 CardView 中的不同卡片打开不同的活动,Android studio 中的 Recyclerview Fragment
- python - apscheduler:任务完成后如何结束调度程序
- excel - 删除行直到定义列的宏代码