Spring Batch:找不到字段或属性“stepExecutionContext”

时间:2014-01-14 11:29:55

标签: spring-batch

我有以下弹簧批处理作业配置。然后有一个读者将详细信息传递给具有两个特定编写器的复合编写器。两个编写器共享一个公共父级,并且需要对它们执行的INSERT操作使用相同的JobId。

<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)

我已尝试在各个地方设置scope =“step”,但无济于事。有什么建议吗?

1 个答案:

答案 0 :(得分: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"/>