当前位置: 首页 > 知识库问答 >
问题:

Spring Batch BeanWrapperFieldExtractor用于大量字段

岳安福
2023-03-14

我正在编写一个Spring批处理应用程序,它读取一个CSV文件,进行一些转换,并将修改后的CSV写入另一个批处理过程。

我的writer配置如下所示:

 <beans:property name="lineAggregator">
<beans:bean class="org.springframework.batch.item.file.transform.FormatterLineAggregator">
        <beans:property name="fieldExtractor">
                <beans:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                 <beans:property name="names" value="column1, column2, column3, column4 ------ 322 fields " /> 
                </beans:bean>
            </beans:property>

            <beans:property name="format" value="%-8s%-12s%-11s%-16s" ----322 fields /> 
        </beans:bean>
    </beans:property>

我必须写322个字段。我无法获得任何FormatterLineAggregator来完成我的工作。如果我写的格式是

<property name="format" value="%s;%s;%s;%s;%s;%s;%s;%f;%f;%s;%f;%f;%td.%tm.%​tY;%td.%tm.%<‌​tY;%s;%td.%tm.%&‌​lt;tY;%s;%s;%s;%s;%t‌​d.%tm.%tY" /> , 

它变得非常混乱,很难确保所有字段都是正确的。

我想到了3种不同的解决方案:

>

写一个CustomEditorFieldsExtractor,但不知道在类中写什么以及如何格式化字段(首选)。

使用“非标准”BeanIO框架jar,但我担心我的客户不会同意这个解决方案。

有人能提供一些信息吗。谢谢你的帮助!

共有1个答案

仲学真
2023-03-14

您可以通过以下方式继续解决方案#2:

  1. 具体化如何格式化bean类的每个属性(例如,在XML或文本文件中)
class Aggregator implements LineAggregator<T> {
  private Map<String, String> propertyFormat;

  public String aggregate(T item) {
    final StringBuilder sb = new StringBuilder();
    for(final String property : propertyFormat.keySet()) {
      final String format = propertyFormat.get(property);
      final Object propertyValue = /* Extract property from item using Spring beans */;
      sb.append(String.format(format, propertyValue));
    }
    return sb.toString();
  }
}
 类似资料:
  • 问题内容: 我试图分裂循环即 使用multiprocessing.Process,它对于较小的N值效果很好。当我使用较大的N值时,就会出现问题。在p.join()之前或期间发生了一些奇怪的事情,并且程序没有响应。如果我将print i放在函数f的定义中,而不是q.put(i),则一切正常。 我将不胜感激任何帮助。这是代码。 问题答案: 您正在尝试无限制地增加队列,并且您正在加入一个等待队列中有空间

  • 问题内容: 要使用带有大量数字(100,000+)的Fermat基本性测试时需要的[模幂,它需要进行一些非常大的计算。 当我将两个大数相乘时(例如:62574和62574),PHP似乎将结果强制转换为浮点数。获取该模量的值将返回奇怪的值。 有什么方法可以使PHP正确执行这些计算?另外,还有另一种方法可以找到适用于大量数值的模量值吗? 问题答案: 出于某种原因,PHP中有两个处理任意长度/精度数字的

  • 我有一个四阶段聚合查询,其形式为match->group->project->sort。聚合工作正常,并生成如下所示的数组。 下面是我的聚合查询。我有没有办法只显示“计数”字段大于500的结果?我试图添加到项目阶段,但没有运气。

  • 我正在使用JSON API插件与我的wordpress页面,get_recent_posts json的数组大小约为250个帖子。例如,当我调用 http://www.example.org/api/get_recent_posts/ 在浏览器中查看这些帖子时,我得到一个空白页面,控制台中没有错误。但是,如果我限制例如 http://www.example.org/api/get_recent_p

  • 问题内容: 我将如何使用Java中的超大型数进行计算? 我已经尝试过了,但是最大值达到了9223372036854754775807,当使用整数时,它不能保存足够的数字,因此对于我所需要的来说不够准确。 有没有办法解决? 问题答案: 你可以将类用于整数和具有十进制数字的数字。这两个类都在包中定义。 例:

  • 问题内容: 我发现列表大于数字。 有什么理由可以奏效吗?我无法使用将列表转换为int 。无法使用将该int转换为列表。那么python如何比较两者呢? 问题答案: 在“不匹配”类型的情况下,这些类型按类型名称按字典顺序列出:“列表”按字母顺序在“ int”之后,因此更大。 CPython实现细节:除数字外,其他类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。(来源) 没有用