2017-06-23 95 views
0

我在項目中使用以下設置作爲作業定義。春季批次SkipPolicy未使用

在該項目上,批處理作業在數據庫中定義。下面的xml-job定義用作在運行時創建所有這些批處理作業的模板。

這工作正常,除了在數據處理器中BeanCreationException的情況。發生此異常時,不會調用跳過策略,而是立即終止該批次。

這可能是什麼原因?我該怎麼做才能讓dataProcessor中的每個異常都會使用SkipPolicy? 感謝很多提前 基督教

版本:春季批次3.0.7

 <batch:job id="MassenGevoJob" restartable="true"> 
     <batch:step id="selectDataStep" parent="selectForMassenGeVoStep" next="executeProcessorStep" /> 
     <batch:step id="executeProcessorStep" 
       allow-start-if-complete="true" next="decideExitStatus" > 
       <batch:tasklet> 
           <batch:chunk reader="dataReader" processor="dataProcessor" 
            writer="dataItemWriter" commit-interval="10" 
            skip-policy="batchSkipPolicy"> 
           </batch:chunk> 
           <batch:listeners> 
            <batch:listener ref="batchItemListener" /> 
            <batch:listener ref="batchSkipListener" /> 
            <batch:listener ref="batchChunkListener" /> 
           </batch:listeners> 
         </batch:tasklet> 
       </batch:step> 
     <batch:decision decider="failOnPendingObjectsDecider" 
       id="decideExitStatus"> 
       <batch:fail on="FAILED_PENDING_OBJECTS" exit-code="FAILED_PENDING_OBJECTS" /> 
       <batch:next on="*" to="endFlowStep" /> 
     </batch:decision> 
     <batch:step id="endFlowStep"> 
       <batch:tasklet ref="noopTasklet"></batch:tasklet> 
     </batch:step> 
     <batch:validator ref="batchParameterValidator" /> 
     <batch:listeners> 
       <batch:listener ref="batchJobListener" /> 
     </batch:listeners> 
    </batch:job> 

回答

0

一個BeanCreationException是不是真的跳過的,因爲它通常Spring Batch的開始之前發生。這對你的應用程序來說通常也是一個致命的錯誤(Spring不能創建你定義的對你的應用程序至關重要的組件)。如果創建該bean受到問題影響並且沒有問題,那麼我建議將它的創建封裝在工廠中,以便可以控制創建該bean的任何異常。例如,如果您無法創建自定義ItemProcessor,則如果沒有問題,您的FactoryBean可能會返回PassthroughItemProcessor

+0

謝謝你的回答。 我的問題不夠精確。當數據處理器試圖用無效的構造函數參數applicationContext.getBean(.....),後應用程序已成功startet來實例化一個bean時 的bean創建例外。在這種情況下,我期待着我使用的AlwaysSkipPolicy被調用,但事實並非如此。該步驟立即結束... – CGoose