java - 尝试仅获取值的子集时,FixedLength 会出现问题

标签 java spring spring-batch batch-processing

我确实有一个文件,其中一行中有许多记录或列。该文件正在多个系统中使用。因此,并非所有字段都是我的要求所必需的。因此,如果我只设置如下所示的值的子集

<property name="lineTokenizer">
    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
        <property name="names" value="aa,cc,vv,bb" />
        <property name="columns" value="1-578,579-579,580-580,581-581" />
    </bean>
</property>

我收到如下异常

org.springframework.batch.item.file.transform.IncorrectLineLengthException: Line is shorter than max range 581
org.springframework.batch.item.file.transform.FixedLengthTokenizer.doTokenize(FixedLengthTokenizer.java:109)
org.springframework.batch.item.file.transform.AbstractLineTokenizer.tokenize(AbstractLineTokenizer.java:112)
org.springframework.batch.item.file.mapping.DefaultLineMapper.mapLine(DefaultLineMapper.java:43)
org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:180)

我们是否需要做一些特殊的事情来仅获取值的子集

最佳答案

异常(exception)情况是该行比您提供的范围短。例如,您映射的列太多,而不是太少。

话虽这么说,您需要在 FixedLengthTokenizer 中映射整个记录。但是,您使用的 FieldSetMapper 不需要使用所有这些字段。

关于java - 尝试仅获取值的子集时,FixedLength 会出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095912/

相关文章:

java - 调用存储过程的批处理应用程序的正确 block 大小是多少?

java - 在Java中使用==运算符来比较包装对象

java.io.IOException : Invalid header signature; read 0x6D78204C4D54483C, 预期 0xE11AB1A1E011CFD0

MDB 中 SpringBeanAutowiringInterceptor 的 java 配置

java - 使用 AbstractTransactionalJUnit4SpringContextTests : changes in DB not reverted after test method 测试纯 JDBC DAO 方法

hibernate - 有 hibernate 中批处理的示例吗?

java - 为什么两个看似相同的 hashmap 在被 gson 序列化时有不同的行为?

Java创建文件如果不存在

java - <mvc :resources> - Does it cache to memory? Spring 4.0.5

java - 1 个 ItemReader、2 个 SQL 查询、jdbcTemplate?