Spring - использование FlatFileItemReader с FixedLengthTokenizer - PullRequest
0 голосов
/ 14 января 2019

Я хочу прочитать транзакции из текстового файла и затем записать эти транзакции в базу данных с помощью JdbcBatchItemWriter. Когда я использую CSV-файл и DelimitedLineTokenizer, он работает нормально. Если я использую текстовый файл и FixedLengthTokenizer, не могу прочитать строки, потому что метод readLine () возвращает нуль в методе doRead (). Как я могу решить эту проблему. Спасибо за вашу помощь.

fileManager.xml

<bean id="transactionDataFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"
      scope="step">
    <property name="resource" value="#{jobParameters['processPath']}"/>
    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer">
                <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                    <property name="names" value="type,code"/>
                    <!--<property name="columns" value="1-12, 13-15"/>-->
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="transactionMap"/>
                </bean>
            </property>
        </bean>
    </property>
    <property name="linesToSkip" value="1"/>
</bean>


<bean id="transactionDataFileItemWriter"
      class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <property name="dataSource" ref="dataSource"/>
    <property name="sql">
        <value>
            <![CDATA[
       insert into TB_FORMAT(TYPE, CODE)
        values (:type, :code)
   ]]>
        </value>
    </property>
    <property name="itemSqlParameterSourceProvider">
        <bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider"/>
    </property>
</bean>

file.txt

123         abc              
456         def

1 Ответ

0 голосов
/ 16 января 2019

попробуйте это - вы использовали DelimitedLineTokenizer, вместо этого попробуйте использовать FixedLengthTokenizer

<bean id="transactionDataFileItemReader"
    class="org.springframework.batch.item.file.FlatFileItemReader"
    scope="step">
    <property name="resource"
        value="#{jobParameters['processPath']}" />
    <property name="lineMapper">
        <bean
            class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer">
                <bean
                    class="org.springframework.batch.io.file.transform.FixedLengthTokenizer">
                    <property name="names" value="type,code" />
                    <property name="columns" value="1-12, 13-15" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean
                    class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="transactionMap" />
                </bean>
            </property>
        </bean>
    </property>
    <property name="linesToSkip" value="1" />
</bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...