gpt4 book ai didi

java - 如何在 Spring Batch 中从 ItemReader 访问作业参数?

转载 作者:IT老高 更新时间:2023-10-28 13:01:52 26 4
gpt4 key购买 nike

这是我的 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 中这些机制的信息?

最佳答案

如前所述,您的阅读器需要在“步骤”范围内。您可以通过 @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) {
//...
}
}

默认情况下,此范围不可用,但如果您使用的是 batch XML 命名空间,则该范围将可用。如果不是,根据 Spring Batch documentation 将以下内容添加到 Spring 配置中将使范围可用:

<bean class="org.springframework.batch.core.scope.StepScope" />

关于java - 如何在 Spring Batch 中从 ItemReader 访问作业参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com