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

如何在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>

这是商品阅读器:

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" />


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

  • 问题内容: 我想保存传递给JobDSL作业的参数。我知道我可以引用各个参数,但是我想使代码通用。我将如何访问传递给作业的参数列表? 当前代码如下所示: 我希望能够使其看起来像: 是构建流程插件中可用的内容,而JobDSL插件中没有。 问题答案: DSL不提供对构建参数的访问。但是脚本可以访问Jenkins对象模型,因此您可以使用Jenkins API来检索当前构建及其参数:

  • 用例:步骤1:ItemReader:从数据库中读取1000个ItemProcessor块中的数据:处理这些数据。ItemWriter:将数据写入地图,以便下一步使用 步骤2:ItemReader:读取地图ItemProcessor:处理地图数据并获取新对象。ItemWriter:将新的进程对象持久化到数据库中。 现在我希望Map在整个作业中保持不变,目前我已经为Map创建了一个不同的POJO类,并

  • 如何从胶水作业中检索胶水工作流参数? 我有一个“Python Shell”类型的AWS胶水作业,它从胶水工作流中定期触发。 该作业的代码将在大量不同的工作流中重用,因此我希望检索工作流参数,以消除对冗余作业的需求。 AWS开发人员指南提供了以下教程:https://docs.AWS.amazon.com/glue/latest/dg/workflow-run-properties-code.htm

  • 我有一个Jenkins管道工作,它被配置为检查一个git回购和一个特定的本地分支。 两个值都为“null”

  • 我在grails中使用服务,并从控制器中的服务获取和设置数据,没有问题。我知道如何使用它。。。但是这个问题我解决不了,如果你知道出了什么问题,请帮助我。 有一个QuartzWork,我从控制器的服务时间表...数据存储在PostgreSQL中。使用所有插件和2.3.3 Grails的最新版本。在下面的代码中,我只想打印昵称,但我无法获得服务。试图得到豆,def grailsApplication但