gpt4 book ai didi

java - Spring - FlatFileItemReader 与 FixedLengthTokenizer 的结合使用

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:38 27 4
gpt4 key购买 nike

我想从文本文件中读取事务,然后使用 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

最佳答案

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

关于java - Spring - FlatFileItemReader 与 FixedLengthTokenizer 的结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54180042/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com