Spring 使用 FlatFileItemReader 批处理空文件 xML
Spring Batch empty file using FlatFileItemReader xML
我正在尝试验证输入文件是空的还是有数据。
我正在通过 XML beans 配置使用 spring 批处理,我的实际配置如下:
<!-- READERS -->
<bean id="mgbfItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="strict" value="false" />
<!-- Read a file -->
<property name="resource" value="file:///fichtemcomp/datent/#{processDataClass.fileName}" />
<property name="linesToSkip" value="10" />
<property name="encoding" value="UTF-8" />
<!-- Mapper -->
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<!-- split it -->
<property name="lineTokenizer">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value="|" />
<!-- Valores del layout -->
<property name="names" value="name,secondName,lastName" />
</bean>
</property>
<!-- Wrapper -->
<property name="fieldSetMapper">
<bean class="com.bbva.mgbf.batch.listeners.ScholarItemReader">
</bean>
</property>
</bean>
</property>
</bean>
<!-- END READERS -->
在我的 class Scholar ItemReader 中,我有类似的东西:
@Override
public Map<String, Object> mapFieldSet(FieldSet fieldSet) throws BindException {
LOGGER.info("Reading all items \t {}", fieldSet);
LOGGER.info("FieldCount \t {}", fieldSet.getFieldCount());
Map<String, Object> dataIn = new HashMap<>(65);
if (fieldSet.getFieldCount() > 0 && !fieldSet.readString(0).trim().isEmpty()) {
LOGGER.info("in if ");
for (int i = 0; i < 65; i++) {
String key = "" + i;
String value = fieldSet.readString(i);
dataIn.put(key, value);
}
}else{
dataIn.put("empty", "emptyFile");
}
return dataIn;
}
但它从未进入"else "声明,它只是结束了这个过程。
有谁知道是否有其他方法可以验证文件是否为空?
fieldSetMapper
在 reader 已经读取一行时被调用,因此在映射器中尝试检查文件是否为空在这个过程中为时已晚。
I'm trying to validate if an input file is empty or has data
我会使用预验证 tasklet 步骤来检查文件是否为空。
我正在尝试验证输入文件是空的还是有数据。 我正在通过 XML beans 配置使用 spring 批处理,我的实际配置如下:
<!-- READERS -->
<bean id="mgbfItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="strict" value="false" />
<!-- Read a file -->
<property name="resource" value="file:///fichtemcomp/datent/#{processDataClass.fileName}" />
<property name="linesToSkip" value="10" />
<property name="encoding" value="UTF-8" />
<!-- Mapper -->
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<!-- split it -->
<property name="lineTokenizer">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value="|" />
<!-- Valores del layout -->
<property name="names" value="name,secondName,lastName" />
</bean>
</property>
<!-- Wrapper -->
<property name="fieldSetMapper">
<bean class="com.bbva.mgbf.batch.listeners.ScholarItemReader">
</bean>
</property>
</bean>
</property>
</bean>
<!-- END READERS -->
在我的 class Scholar ItemReader 中,我有类似的东西:
@Override
public Map<String, Object> mapFieldSet(FieldSet fieldSet) throws BindException {
LOGGER.info("Reading all items \t {}", fieldSet);
LOGGER.info("FieldCount \t {}", fieldSet.getFieldCount());
Map<String, Object> dataIn = new HashMap<>(65);
if (fieldSet.getFieldCount() > 0 && !fieldSet.readString(0).trim().isEmpty()) {
LOGGER.info("in if ");
for (int i = 0; i < 65; i++) {
String key = "" + i;
String value = fieldSet.readString(i);
dataIn.put(key, value);
}
}else{
dataIn.put("empty", "emptyFile");
}
return dataIn;
}
但它从未进入"else "声明,它只是结束了这个过程。
有谁知道是否有其他方法可以验证文件是否为空?
fieldSetMapper
在 reader 已经读取一行时被调用,因此在映射器中尝试检查文件是否为空在这个过程中为时已晚。
I'm trying to validate if an input file is empty or has data
我会使用预验证 tasklet 步骤来检查文件是否为空。