2014-01-14 38 views
0

我有以下彈簧批處理作業配置。有一個讀者將一個細節傳遞給具有兩個特定作者的複合作家。兩個編寫者都共享一個共同的父代,並且需要爲它們執行的INSERT操作使用相同的JobId。Spring批處理:無法找到字段或屬性'stepExecutionContext'

<bean id="job" parent="simpleJob"> 
    <property name="steps"> 
     <list> 
      <bean parent="simpleStep"> 
       <property name="itemReader" ref="policyReader"/>  
       <property name="itemWriter" ref="stagingCompositeWriter"/> 
      </bean> 
     </list> 
    </property> 
</bean> 

<bean id="stagingCompositeWriter" class="org.springframework.batch.item.support.CompositeItemWriter"> 
    <property name="delegates"> 
     <list> 
      <ref bean="stagingLoadWriter"/> 
      <ref bean="stagingPolicyWriter"/> 
     </list> 
    </property> 
</bean> 

<bean id="abstractStagingWriter" class="a.b.c.AbstractStagingWriter" abstract="true"> 
    <property name="stepExecution" value="#{stepExecutionContext}"/> 
    <property name="hedgingStagingDataSource" ref="hedgingStagingDataSource"/> 
</bean> 

<bean id="stagingLoadWriter" class="a.b.c.StagingLoadWriter" parent="abstractStagingWriter"/> 

<bean id="stagingPolicyWriter" class="a.b.c.StagingPolicyWriter" parent="abstractStagingWriter"/> 

,當我運行我的代碼,我收到以下錯誤

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'stepExecutionContext' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' 
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:208) 
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:72) 
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:93) 
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:88) 
at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:139) 

我已經嘗試設置範圍=在不同地方,但都無濟於事「臺階」。有什麼建議麼?

+0

,你可以嘗試用$ {} stepExecutionContext」 –

+2

替換#{} stepExecutionContext不這麼認爲 - 美元符號會告訴背景下尋找名爲「屬性字段stepExecutionContext '我知道它不存在 – emeraldjava

+2

我的假設:你不能直接連接stepExecutionContext,所以使用StepListener。否則嘗試在所有* Writer bean中放置scope =「step」 –

回答

4

只能在scope =「step」中定義的bean中訪問stepExecutionContext。 你的bean定義更改爲

<bean id="stagingLoadWriter" scope="step" class="a.b.c.StagingLoadWriter" parent="abstractStagingWriter" /> 

<bean id="stagingPolicyWriter" scope="step" class="a.b.c.StagingPolicyWriter" parent="abstractStagingWriter"/> 
+0

我的救生員:D thx〜 – Luvie

+0

我一直在收到同樣的錯誤。我的代碼是這樣的:@Bean(name =「myMongoItemReader」) \t @StepScope \t public ItemReader searchMongoItemReader() – Shashank

相關問題