java - 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 中获取我的项目并填写此字段,但异常会停止此操作。我怎样才能做到这一点?
对不起我的英语不好。提前感谢所有帮助。
解决方案
推荐阅读
- python-3.x - 在多列上使用 str() 方法的数据框
- sql-server - 如何更新 SQL Server 中的父字段
- mongodb - 如何从 mongodb 返回值的通量中返回列表
- java - 安装插件 Gradle 后 Eclipse 2020-06-R 未启动
- docker - 服务器重启后容器进入重启循环
- vim - 尝试使用 Vim Valloric/YouCompleteMe 插件时的 Mac OS 限制
- r - 为什么重要性参数会影响 R 中随机森林的性能?
- android - Android Room 插入不同类型对象的有效方法
- azure - 从 Kusto 查询中过滤掉 IP 地址
- swift - 用 Am 和 Pm 计算两个时间标签之间的时间差给了我错误的负值