복붙노트

[SPRING] Spring Batch로 여러 열의 CSV 파일을 읽는 법

SPRING

Spring Batch로 여러 열의 CSV 파일을 읽는 법

다음과 같이 고정 된 수의 열이없는 CSV 파일이 있습니다.

  col1,col2,col3,col4,col5    
  val1,val2,val3,val4,val5 
  column1,column2,column3
  value1,value2,value3

Spring Batch와 함께 이런 종류의 CSV 파일을 읽을 방법이 있습니까?

나는 이것을 시도했다 :

<bean id="ItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">

    <!-- Read a csv file -->
    <property name="resource" value="classpath:file.csv" />

    <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="names"
                        value="col1,col2,col3,col4,col5,column1,column2,column3" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean
                    class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="myBean" />
                </bean>
            </property>

        </bean>
    </property>

</bean>

그러나 그 결과는 다음과 같습니다.

해결법

  1. ==============================

    1.PatternMatchingCompositeLineMapper를 사용하면 패턴에 따라 라인 당 적절한 LineMapper 구현에 위임 할 수 있습니다. 거기에서 각 대리자는 DelimtedLineTokenizer와 FieldSetMapper를 사용하여 그에 따라 줄을 매핑합니다.

    PatternMatchingCompositeLineMapper를 사용하면 패턴에 따라 라인 당 적절한 LineMapper 구현에 위임 할 수 있습니다. 거기에서 각 대리자는 DelimtedLineTokenizer와 FieldSetMapper를 사용하여 그에 따라 줄을 매핑합니다.

    이에 대한 자세한 내용은 다음 문서를 참조하십시오. http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/mapping/PatternMatchingCompositeLineMapper.html

  2. ==============================

    2.AbstractLineTokenizer # DelimitedLineTokenizer의 setStrict (boolean)가 작업을 수행해야합니다.

    AbstractLineTokenizer # DelimitedLineTokenizer의 setStrict (boolean)가 작업을 수행해야합니다.

    javadoc에서 :

    구성의이 부분을 다음과 같이 변경해야합니다.

    <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
        <property name="names" value="col1,col2,col3,col4,col5,column1,column2,column3" />
        <property name="strict" value="false" />
    </bean>
    
  3. from https://stackoverflow.com/questions/45501777/how-to-read-csv-file-with-different-number-of-columns-with-spring-batch by cc-by-sa and MIT license