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

如何读取csv与未知的列名和未知的列计数在Spring批次中使用?

汪理
2023-03-14

我的步骤有以下FlatFileItemReader配置:

@Bean
@StepScope
public FlatFileItemReader<RawInput> reader(FieldSetMapper<RawInput> fieldSetMapper, @Value("#{jobParameters['files.location']}") Resource resource) {
    var reader = new FlatFileItemReader<RawInput>();
    reader.setName("my-reader");
    reader.setResource(resource);
    var mapper = new DefaultLineMapper<RawInput>();
    mapper.setLineTokenizer(crmCsvLineTokenizer());
    mapper.setFieldSetMapper(fieldSetMapper);
    mapper.afterPropertiesSet();
    reader.setLineMapper(mapper);
    return reader;
}

RawInput包含1个字段,因此它允许我用单列读取csv。现在的要求是变化,现在我必须能够读取任何csv文件,任何行数,因此我需要以某种方式传递数组,而不是RAW输入。是否可以使用FlatFileItemReader,或者我应该更改实现?

共有1个答案

酆奇文
2023-03-14

它的工作原理:

    var reader = new FlatFileItemReader<List<String>>();
    reader.setName("reader");
    reader.setResource(resource);
    //line mapper
    var lineMapper = new DefaultLineMapper<List<String>>();        
    lineMapper.setLineTokenizer(new DelimitedLineTokenizer());
    lineMapper.setFieldSetMapper(myFieldSetMapper); // see implementation below
    lineMapper.afterPropertiesSet();

    reader.setLineMapper(lineMapper);
    return reader;


@Component
public class MyFieldSetMapper implements FieldSetMapper<List<String>> {

    @NonNull
    @Override
    public List<String> mapFieldSet(@NonNull FieldSet fieldSet) {
        return Arrays.stream(fieldSet.getValues())
                .map(StringUtils::lowerCase) // optional
                .map(StringUtils::trimToNull) // optional
                .collect(Collectors.toList());
    }
}
 类似资料:
  • 以前我使用的是批处理<代码>spring-batch-core-2.2.0 但现在我得到了一个错误: "错误的SQL语法[INSERT into BATCH _ JOB _ EXECUTION(JOB _ EXECUTION _ ID,JOB_INSTANCE_ID,START_TIME,END_TIME,STATUS,EXIT_CODE,EXIT_MESSAGE,VERSION,CREATE_T

  • 我在学春靴。我想引用MySQL数据并在Thymeleaf中显示MySQL数据。但是,我得到以下错误: java.sql.sqlsyntaxerroreXception:“字段列表”中的未知列“employee0_.Department_Department_ID”。 另外,我想设置为从Employee类引用Department类。(@manytoone)但是我不确定当前的实体类和MySQL设置是否

  • 问题内容: 从那以后,我们了解到,从db2jcc.jar(UNIVERSAL)的db2jcc4.jar(JCC)进行更改可以解决我们开发环境中的问题。问题是不起作用的是较新的一个。如果没有充分的理由,我们不想向后退。但是我不理解以上链接中的查询在新驱动程序中无效的原因。 我们知道那是列…如果我们通过强制使用空格将其从结果中删除,则一切正常(除非我们不获取数据)。该查询在其他环境中运行良好。 我看到

  • 我是词的初学者。我在CodeIgniter中的insert_批处理函数中遇到错误。当我将数组插入insert_批处理时,我得到了这个错误 未知的列数组在字段列表和数组到字符串转换我已经做了很多解决方案,但仍然得到这个错误,有人能给我一个想法吗? 在我看来 控制器 模型函数 谁能告诉我如何解决这个问题?

  • 所以首先我为我不可靠的解释道歉。我的PHP技能需要认真改进。 错误消息表示“”未知。我知道这不是真的,因为当我创建一个名为“”的变量并回显前者时,我会得到编号。 以下是完整的错误消息: 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42S22]:未找到列:C:\xampp\htdocs\loginregister master\addnew中的“字段列表”中的1054

  • 我需要帮助。 使用方法时,在HQL中出现错误: 我猜他必须写而不是 可能是我做错了实体和关系吗? 2个实体-房屋和街道 ER模型: 餐桌街道 ID 名称 houses_id 桌房 ID 名称 我的类: 街道 房屋 我的道小鬼: StreetDaoImp: HouseDaoImpl: 错误: