首页 > 解决方案 > Spring Batch - 使用 MultiResourceItemReader 时在 CustomLineMapper 中获取文件名

问题描述

我正在使用一个实现了接口ResourceAware的Item来获取当前资源文件名。我在ItemProcessor中得到它,这可以很好地记录有关错误的完整信息。

无论如何,如果 FieldSetMapper 抛出异常的那一刻,我想获取文件名,以注册行内容、行号和文件名,但我没有找到正确的方法。

这是我当前的代码:

public class MyCustomLineMapper<T> implements LineMapper<BaseDTO>, InitializingBean  {

        private LineTokenizer tokenizer;
        private BeanWrapperFieldSetMapper<BaseDTO> fieldSetMapper;

        public BaseDTO mapLine(String line, int lineNumber) throws Exception {

            try {
                BaseDTO r = fieldSetMapper.mapFieldSet(tokenizer.tokenize(line));
                r.setLineNumber(lineNumber);
                r.setLineContent(line);
                return r;
            } catch(Exception ex){
                BaseDTO r = new BaseDTO();
                r.setError(String.format(Keys.LINE_PARSE_ERROR, lineNumber, "FILE_NAME", line));
                return r;
                /// I want use the current filename in this moment.
            }
        }

        public void setLineTokenizer(LineTokenizer tokenizer) {
            this.tokenizer = tokenizer;
        }

        public void setFieldSetMapper(BeanWrapperFieldSetMapper<BaseDTO> fieldSetMapper) {
            this.fieldSetMapper = fieldSetMapper;
        }

        public void afterPropertiesSet() {
            Assert.notNull(tokenizer, "The LineTokenizer must be set");
            Assert.notNull(fieldSetMapper, "The FieldSetMapper must be set");
        }

}

在我的项目“ BaseDTO ”中,我实现了这样的ResourceAware

public class BaseDTO implements ResourceAware {

    protected String itemClassifier;
    protected String error;
    protected int lineNumber;
    protected String lineContent;
    protected Resource res;
    protected String fileName;

    @Override
    public void setResource(Resource res) {
        this.res = res;
        this.fileName = res.getFilename();
    }

但是在读取文件的异常情况下(IncorrecNumberOfTokens by Example)我需要从 FieldSetMapper 中获取我的项目并填写此字段,但异常会停止此操作。我怎样才能做到这一点?

对不起我的英语不好。提前感谢所有帮助。

标签: javaspringspring-batch

解决方案


推荐阅读