2014-02-07 166 views
0

我試圖將數據從一個數據源複製到另一個,用於Ibaitsbatchitemwriter類來這樣做。紀錄是得到了插入到目標數據庫,但該批次得到如下空指針異常的結束,Spring批處理 - Ibatis批處理項作家 - 空指針異常

顯示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) 的組織。 springframework的.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75)

但添加屬性assertupdates = fales後,我沒有收到錯誤,然後數據也被複制。但我不相信與空指針錯誤,看起來像我缺少的東西在我的配置左右。

我使用spring infra 2.2.4和ibatis版本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

該NPE是由於SqlMapClient返回零結果的事實。如果您不需要檢查記錄的數量,則可以將其關閉。如果你需要他們檢查,你會想看看爲什麼這個查詢沒有返回任何結果。您可以在這裏看到IbatisBatchItemWriter的代碼:IbatisBatchItemWriter