这是我的一部分job.xml:
job.xml
<job id="foo" job-repository="job-repository"> <step id="bar"> <tasklet transaction-manager="transaction-manager"> <chunk commit-interval="1" reader="foo-reader" writer="foo-writer" /> </tasklet> </step> </job>
This is the item reader:
import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("foo-reader") public final class MyReader implements ItemReader<MyData> { @Override public MyData read() throws Exception { //... } @Value("#{jobParameters['fileName']}") public void setFileName(final String name) { //... } }
这是Spring Batch在运行时所说的:
Field or property 'jobParameters' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
怎么了 在Spring 3.0中,我在哪里可以了解有关这些机制的更多信息?
如前所述,你的阅读器需要进行“逐步”调整。你可以通过@Scope("step")注释完成此操作。如果你将该注释添加到阅读器,则它应该对你有用,如下所示:
@Scope("step")
import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("foo-reader") @Scope("step") public final class MyReader implements ItemReader<MyData> { @Override public MyData read() throws Exception { //... } @Value("#{jobParameters['fileName']}") public void setFileName(final String name) { //... } }
该范围默认情况下不可用,但是如果你正在使用batchXML名称空间,则该范围将不可用。如果不是这样,请根据Spring Batch文档,在Spring配置中添加以下内容以使作用域可用:
batch
<bean class="org.springframework.batch.core.scope.StepScope" />