当前位置: 首页 > 面试题库 >

如何在Spring Batch中从ItemReader访问参数?

鲁斯伯
2023-03-14
问题内容

这是我的一部分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")注释完成此操作。如果你将该注释添加到阅读器,则它应该对你有用,如下所示:

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配置中添加以下内容以使作用域可用:

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


 类似资料:
  • 问题内容: 这是我的一部分: 这是商品阅读器: 这是Spring Batch在运行时所说的: 怎么了 在Spring 3.0中,我在哪里可以了解有关这些机制的更多信息? 问题答案: 如前所述,您的阅读器需要进行“逐步”调整。您可以通过注释完成此操作。如果您将该注释添加到阅读器,则它应该对您有用,如下所示: 该范围默认情况下不可用,但是如果您正在使用XML名称空间,则该范围将不可用。如果不是这样,请

  • 问题内容: C和派生函数的入口点函数具有和(和)参数,但是Swift没有合适的参数:顶级代码只是代码,并且没有参数。 在Swift程序中,如何访问等价的? 问题答案: 进程 刚刚重命名为 CommandLine (自Swift 3.0 8月4日快照以来) (由于某些原因,变更日志中未提及)

  • 我们有一个预编译的C#Azure函数。这是一个HTTP触发的函数,具有必需的路由参数。如何从对象访问路由参数值?我们在同一个类文件中有几个不同的私有方法,它们已经使用了从公共Run()方法传递的实例。 我知道我可以在公共方法的签名中添加一个与route参数同名的参数,然后将该值传递给各种私有方法。但是我已经将HttpRequest对象传递到了需要使用它的地方。

  • 问题内容: 我的POST方法看起来像这样: 当我在Netbeans中创建Jersey客户时,调用post方法的方法如下所示: 运行此测试时: 它在服务器中提供以下输出: 我需要更改什么才能使参数给出正确的值? 问题答案: 你的方法应该接受JSON对象而不是字符串。Jersey使用JAXB支持封送和拆封JSON对象(有关详细信息,请参阅jersey文档)。创建一个类似的类: 然后,你的方法将如下所示

  • 我知道如何获取如下查询的参数: 在这种情况下,我可以使用获取参数(例如中的)。 但是,对于类似的url,如何访问变量? 我尝试了,但没有成功。

  • Rust教程没有解释如何从命令行获取参数。在所有示例中,< code>fn main()只显示了一个空参数列表。 从 访问命令行参数的正确方法是什么?