spring batch - FlatFileItemReader - token是object类型

时间:2017-10-19 18:37:01

标签: spring spring-batch

我第一次在我的应用程序中使用spring batch和spring数据jpa。  Spring批处理读取一个文本文件,表示aCode,aName,sCode。  我有一个POJO,它映射下面的这些键,一个键是另一种类型的对象

 public class Pojo{
  private AnotherObject sCode;  
  private String aName;
  private String aCode;
 }

以下是我在BatchConfiguration类中的读者。  我该如何处理这个AnotherObject。  我收到一个错误说:

引起:org.springframework.beans.NotWritablePropertyException:bean类的无效属性'sCode'[Pojo]:在输入键中找到此属性的距离< = 5的重复匹配:[“sCode”,“aCode” ,“一个名字”]。 (考虑减小距离限制或更改输入键名称以使其更接近匹配。)

 @Bean
  @StepScope
  public FlatFileItemReader<Area> reader(
      @Value("#{stepExecutionContext[fromId]}") final String fromId,
      @Value("#{stepExecutionContext[toId]}") final String toId,
      @Value("#{stepExecutionContext[name]}") final String name) {
    FlatFileItemReader<Area> reader = new FlatFileItemReader<>();
    try{

      reader.setResource(new ClassPathResource("area_temp.txt"));   
      LineMapper<Area> areaMapper = createAreaLineMapper();
      reader.setLineMapper(areaMapper);
    }
    catch(Exception e){
      e.printStackTrace();
    }
    return reader;
  }

  private LineMapper<Area> createAreaLineMapper() {
    DefaultLineMapper<Area> areaLineMapper = new DefaultLineMapper<>();

    LineTokenizer areaTokenizer = createAreaTokenizer();
    areaLineMapper.setLineTokenizer(areaTokenizer);

    FieldSetMapper<Area> areaInformationMapper = createAreaInformationMapper();
    areaLineMapper.setFieldSetMapper(areaInformationMapper);

    return areaLineMapper;
}

 private LineTokenizer createAreaTokenizer() {
    DelimitedLineTokenizer areaLineTokenizer = new DelimitedLineTokenizer();
    areaLineTokenizer.setDelimiter("|");
    areaLineTokenizer.setNames(new String[]{"sCode","aCode","aName"});
    return areaLineTokenizer;
}
 private FieldSetMapper<Area> createAreaInformationMapper() {
    BeanWrapperFieldSetMapper<Area> areaMapper = new BeanWrapperFieldSetMapper<>();
    areaMapper.setTargetType(Area.class);
    return areaMapper;
}

1 个答案:

答案 0 :(得分:1)

异常是非常自我解释的。 BeanWrapperFieldSetMapper允许对名称进行模糊匹配。您可以通过距离配置它的模糊程度。您可以在此处阅读有关在javadoc中设置该距离的更多信息:https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/mapping/BeanWrapperFieldSetMapper.html#setDistanceLimit-int-