我试图将数据从一个数据源复制到另一个数据源,用于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>
有什么想法吗?
答案 0 :(得分:1)
NPE是由于SqlMapClient返回零结果。如果您不需要检查记录的数量,可以将其关闭。如果您需要检查它们,您将需要查看该查询未返回任何结果的原因。您可以在此处查看IbatisBatchItemWriter的代码:IbatisBatchItemWriter。