Spring Batch配置类路径CSV资源报FlatFileParseException错误如何解决
类路径CSV资源的正确配置方式
你现有代码中ClassPathResource("result-match-metadata.csv")的路径配置本身是正确的,只要满足以下两个前提即可正常加载资源:
- CSV文件存放于项目
src/main/resources根目录下;如果存放在resources的子目录中,比如src/main/resources/data/,路径需对应修改为ClassPathResource("data/result-match-metadata.csv") - 确认项目构建工具(Maven/Gradle)的配置没有排除
.csv后缀的资源文件,构建完成后检查target/classes(Maven项目)或build/resources/main(Gradle项目)目录下存在该CSV文件即可。
你当前报错的根因与修复方案
你遇到的FlatFileParseException不是资源路径错误导致的:从报错信息可以看出Spring已经成功定位到了目标CSV文件,错误原因是CSV列分隔符配置不匹配,且没有跳过表头行。
从报错输出的第一行内容可以看到,你的CSV文件列之间是用制表符(Tab)/多空格分隔的,但你代码中调用.delimited()时使用了默认的逗号作为分隔符,无法正确拆分列,同时你没有跳过表头行,会把表头当做数据行解析,触发类型不匹配异常。
修复后的reader配置如下:
@Bean fun reader(): FlatFileItemReader<MatchInput> { return FlatFileItemReaderBuilder<MatchInput>() .name("MatchItemReader") .resource(ClassPathResource("result-match-metadata.csv")) // 指定CSV使用的分隔符,如果是多空格分隔就替换成对应的多空格字符串 .delimited().delimiter("\t") // 跳过第一行表头 .linesToSkip(1) .names(*FIELD_NAMES) .fieldSetMapper(object : BeanWrapperFieldSetMapper<MatchInput>() { init { setTargetType(MatchInput::class.java) } }) .build() }
内容的提问来源于stack exchange,提问作者Mama
相关产品推荐
相关产品推荐

