【问题标题】:Initialize an object from multiple input file data从多个输入文件数据初始化对象
【发布时间】:2022-06-14 18:54:22
【问题描述】:

我有 2 个固定长度的平面文件 F1 和 F2,分别包含数据 (id, A, B) 和 (id, C, D)。

我正在尝试实例化一个对象Foo f = new Foo (id, A, B, C, D).

我怎样才能通过 Spring Batch 实现这一壮举。我无权访问任何数据库,因此无法将 Foo(id, A, B) 插入临时表,然后更新缺失值。

非常感谢:)

【问题讨论】:

  • 为什么要使用数据库来暂存它。那是很多缓慢的阻塞 I/O 和主要故障点。 Spring 已经这样做了。只需要创建一个包含多个步骤的流程。第 1 步加载文件一并填充对象。该步骤的输出进入第 2 步,该步骤加载下一个文件并填充其他字段,然后输出到您想要的任何内容。
  • 谢谢@BrianC的回答,我刚开始使用Spring批处理,如何将步骤1的输出传递到步骤2?
  • this 会回答您的问题吗?也就是说,你真的需要 Spring Batch 吗?像unix.stackexchange.com/questions/113898/… 这样的东西应该可以为您解决问题。排序后,您可以使用SystemCommandTasklet 合并文件,然后使用面向块的步骤来处理包含准备好的数据的合并文件,如您所期望的那样。
  • 非常感谢@MahmoudBenHassine,我会仔细阅读这些线程,尝试正确实施解决方案,然后返回答案。

标签: spring spring-boot spring-batch


【解决方案1】:

感谢 Mahmoud Ben Hassine,使用 awk 脚本解决了我的问题,这是我的脚本

awk 'NR==FNR  
{dossier[$3] = $0;next}
 {
    printf("<client>\n");   
    printf "<rev>%s</rev>\n<pdd>%s</pdd>\n",$0,dossier[$9];
    print("</client>")
  }' pdddos.txt revass.txt > output.txt
sed -i '1s/^/<clients>\n/' output.txt
sed -i -e '$a</clients>' output.txt

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多