这是我的 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>
这是项目阅读器:
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 中这些机制的更多信息?
原文由 yegor256 发布,翻译遵循 CC BY-SA 4.0 许可协议
如前所述,您的读者需要在“步骤”范围内。您可以通过
@Scope("step")
注释来完成此操作。如果您将该注释添加到阅读器,它应该对您有用,如下所示:默认情况下此范围不可用,但如果您使用
batch
XML 命名空间,则可用。如果不是,根据 Spring Batch 文档,将以下内容添加到 Spring 配置将使作用域可用: