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

将Univocity解析器用于Spring批处理

袁英豪
2023-03-14

@Override
public Address read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
    CsvParserSettings parserSettings = new CsvParserSettings();
    //settings
    CsvRoutines routines = new CsvRoutines(parserSettings);
    for (Address address : routines.iterate(Address.class, input, "UTF-8")) {
        /*
         *here I need to return only the current object, 
         *the return of this method will be passed as an argument to a processor
         *the next time this method is called it has to return the next one
         *Could not figure out how to control what is the current.
        */
        return ???:
    }
    return ???;
}



我如何在ItemReader中使用Univocity一次读取一行,仍然使用BeanProcessor将我的行自动解析为Java对象?

共有1个答案

邵璞
2023-03-14

嗨,我是lib的作者<代码>例程。迭代(Address.class,input,“UTF-8”)将返回一个Iterable

每次需要读取下一个地址时,只需调用迭代器即可。next()

我相信你的方法应该写成:

private Iterator<Address> iterator;

@Override
public Address read() throws Exception, UnexpectedInputException,   ParseException, NonTransientResourceException {
    if(iterator == null){
        CsvParserSettings parserSettings = new CsvParserSettings();
        //settings
        CsvRoutines routines = new CsvRoutines(parserSettings);
        iterator = routines.iterate(Address.class, input, "UTF-8")).iterator();
    } 
    if(iterator.hasNext()){
        return iterator.next();
    } else {
        iterator = null;
    }
    return null;
}

希望这有帮助。

 类似资料:
  • 我想知道在使用CsvRoutines包时,是否有方法检查和验证字段。基本上,如果第一列只有数字,我想处理一行,否则跳过/可能抛出异常。我猜2.7.0中发布的@Validate annotation可以实现这一点。但我想知道,是否有其他方法可以在早期版本(如2.5.9)中实现同样的效果?

  • 本文向大家介绍Spring Batch批处理框架使用解析,包括了Spring Batch批处理框架使用解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring Batch批处理框架使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用Spring Batch做为批处理框架,可以完成常规的数据量不是特别大的离线计算。 现在

  • 是否可以根据索引范围将一行解析为多个bean 例: 行:“字段1”、“字段2”、“字段3”。。。。,“字段9”

  • 我使用Spring批处理从Oracle数据库读取数据并将结果写入CSV文件。 我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库)。 这是我的代码: 批处理配置。JAVA 然后我的itemReader bean看起来像: 当我运行批处理时,一切正常。 但是当我尝试在我的BatchApplication中添

  • 我正在尝试从GTFS读取CSV文件。在uniVocity解析器的帮助下压缩,遇到了一个我无法解决的问题。出于某种原因,某些CSV文件的第一列似乎无法正确解析。例如,在“stops.txt”文件中,如下所示: 无法正确解析“stop_id”字段,该字段的值为“null” 这是我用来读取文件的方法: 这就是我的Stop课程的样子: 如果我调用的方法,我得到这个输出是不正确的: 输出: 有人知道为什么会

  • 我正试图用Spring批处理读取带有日期的CSV文件,但在将日期解析为对象时遇到了麻烦: 对象“target”中字段“date”出现字段错误:拒绝值[2017-07-20 04:15:25.0];代码[TypeMismatch.target.date,TypeMismatch.date,TypeMismatch.java.time.LocalDateTime,TypeMismatch];参数[or