代码之家  ›  专栏  ›  技术社区  ›  R.Henderson

处理带有任何字段分隔符的文本文件

  •  0
  • R.Henderson  · 技术社区  · 6 年前

    我需要在spring批处理文件,文件分隔符可以更改。例如,在第一个文件中,文件字段分隔符是逗号。当接收到第二个具有文件字段分隔符选项卡的文件时。如何在spring批处理中处理此类文件?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Afridi    6 年前

    您可以为 LineMapper Reader 将为每个步骤执行的步骤级别范围的。

    线条映射程序bean

        @Bean("lineMapper")
        @StepScope
        public LineMapper<YourCustomRecordVo> lineMapper() {
            DefaultLineMapper<YourCustomRecordVo> lineMapper = new DefaultLineMapper<YourCustomRecordVo>();
    
            DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer("yourDelimiter");
    
            lineMapper.setLineTokenizer(lineTokenizer);
            //set fieldset mappers etc
    
            return lineMapper;
        }
    

    读者豆

    @Bean(name = "reader")
    @StepScope
    public YourCustomReader reader(){
        YourCustomReader  reader = new YourCustomReader();
        reader.setLineMapper(lineMapper());
        //set others necessary properties
        return reader;
    }
    

    这里都 reader 和; lineMapper 将为每个步骤(即为每个文件处理)创建bean。因此,可以根据不同的条件设置不同的分隔符。

    更新的

    为了使用自定义分隔符,可以将其设置为作业属性,如

    JobParametersBuilder paramsBuilder = new JobParametersBuilder();
    paramsBuilder.addString("delimiter", "yourCustomDelimiter");
    

    午餐工作就像

    jobLauncher.run(job, paramsBuilder.toJobParameters());
    

    最后检索作业参数(当前情况下为分隔符)为

        @Bean("lineMapper")
        @StepScope
        public LineMapper<YourCustomRecordVo> lineMapper(@Value("#{jobParameters['delimiter']}") String delimiter) {...}