Spring Batch- Ibatis批处理项目编写器 - 空指针异常

时间:2014-02-07 17:31:07

标签: spring-batch ibatis

我试图将数据从一个数据源复制到另一个数据源,用于Ibaitsbatchitemwriter类这样做。记录已插入目标数据库,但批处理结束时获得空指针异常,如下所示,

显示java.lang.NullPointerException     在org.springframework.batch.item.database.IbatisBatchItemWriter.write(IbatisBatchItemWriter.java:142)     在org.springframework.batch.core.step.item.SimpleChunkProcessor.writeItems(SimpleChunkProcessor.java:175)     在org.springframework.batch.core.step.item.SimpleChunkProcessor.doWrite(SimpleChunkProcessor.java:151)     在org.springframework.batch.core.step.item.SimpleChunkProcessor.write(SimpleChunkProcessor.java:274)     在org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:199)     在org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75)

但是在添加属性assertupdates = fales之后我没有收到错误,然后数据也被复制了。但我不相信空指针错误,看起来在我的配置中丢失了一些东西。

我使用spring infra 2.2.4和ibatis version 2.3.0。

<bean id="targetWriterDepAcct03"
        class="org.springframework.batch.item.database.IbatisBatchItemWriter">
        <property name="sqlMapClient" ref="targetDatabaseMap" />
        <property name="statementId" value="DepositAccountSqlMap.updtDepositAccount" />
        <property name="assertUpdates" value="false" />
    </bean>

<batch:job id="baseJob" abstract="true" restartable="true"
        job-repository="jobRepository" />
    <batch:job id="TboltSyncBatchJob">
        <batch:step id="CheckForConfigFileStep">
            <batch:tasklet ref="CheckForConfigFile" />
            <batch:next on="COMPLETED" to="SyncDataDepAcct03" />
            <batch:end on="FAILED" />
        </batch:step>

        <batch:step id="SyncDataDepAcct03">
            <batch:tasklet transaction-manager="transactionManager">
                <batch:chunk reader="sourceReaderForDepAcct03" writer="targetWriterDepAcct03"
                    commit-interval="1000" />
            </batch:tasklet>
        </batch:step>       

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

NPE是由于SqlMapClient返回零结果。如果您不需要检查记录的数量,可以将其关闭。如果您需要检查它们,您将需要查看该查询未返回任何结果的原因。您可以在此处查看IbatisBatchItemWriter的代码:IbatisBatchItemWriter