2017-07-07 141 views
0

我有兩個不同的文件,一個由管道分隔符「|」分隔,和一個逗號「,」。Spring批處理 - 用於不同分隔文件的FlatFileItemReader

我使用Spring Batch的處理使用FlatFileItemReader這些文件。我不想有兩個讀者和兩個作家的文件。 我可以爲這兩個文件以某種方式使用一個通用的FlatFileItemReader嗎?

此外到的文件將被映射到的對象是不同的。

回答

0

可以注入DelimitedLineTokenizer到FlatFileItemReader和分隔符值設置爲它。 XML配置的相關部分如下

<bean id="pipeDelimitedFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"> 
    ... 
    <property name="lineMapper"> 
     <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> 
      <property name="lineTokenizer"> 
       <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> 
        ... 
        <property name="delimiter" value="|"/> 
       </bean> 
      </property> 
      ... 
     </bean> 
    </property> 
    ... 
</bean> 

您可以類似地配置另一個commaDelimitedFileItemReader bean(逗號實際上是DelimitedLineTokenizer的默認分隔符值)

0

您可以注入一個DelimitedLineTokenizer,並且可以根據需要設置分隔符。您可以使用StepExecutionListener使其通用,並且需要覆蓋beforeStep()方法。您將在StepExecution中設置分隔符。 當你解析它們 「」 分隔然後 stepExecution.getExecutionContext()putString( 「分隔符」, 「」)的文件。 當文件與「|」分隔時然後stepExecution.getExecutionContext()。putString(「delimiter」,「|」);

但你需要創建兩個職位。需要相應地指定監聽器。

你可以看到的例子的上述解釋邏輯從Spring Batch on Walking Techie
代碼一般讀者:

@Bean 
    @StepScope 
    public FlatFileItemReader<Domain> reader(@Value("#{stepExecutionContext[delimiter]}") String delimiter) { 
    FlatFileItemReader<Domain> reader = new FlatFileItemReader<>(); 
    reader.setResource(new ClassPathResource("sample-data.csv")); 
    reader.setLineMapper(new DefaultLineMapper<Domain>() {{ 
     setLineTokenizer(new DelimitedLineTokenizer() {{ 
     setNames(new String[]{"id", "name"}); 
     setDelimiter(delimiter); 
     }}); 
     setFieldSetMapper(new BeanWrapperFieldSetMapper<Domain>() {{ 
     setTargetType(Domain.class); 
     }}); 
    }}); 
    return reader; 
    } 

您可以從Spring Batch Tutorial找到春天的開機春批的例子很多。你會在這裏發現與春季批次有關的所有問題。

0

我已經創造了春季啓動樣本春天批處理程序,將創建兩個作業一個作業將處理讀取從由逗號和其他工作分開來讀取它是由分離CSV文件CSV文件數據管道( 「|」)。兩個作業都使用相同的FlatFileItemReader來讀取CSV文件中的數據,並使用MongoItemWriter將數據寫入MongoDB。

您可以從Spring Batch Example in Spring Boot - CSV Files with different delimiter to Mongo Database

中找到解釋和工作代碼
相關問題