有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用FixedLengthTokenizer使用java Spring FlatFileItemReader

我想从文本文件中读取事务,然后使用JdbcBatchItemWriter将这些事务写入数据库。当我使用csv文件和DelimitedLineTokenizer时,它工作得很好。若我使用文本文件和FixedLengthTokenizer,则无法读取行,因为readLine()方法在doRead()方法中返回null。我如何解决这个问题。谢谢你的帮助

文件管理器。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>

文件。txt

123         abc              
456         def

共 (1) 个答案

  1. # 1 楼答案

    试试这个——您已经使用了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>