java – 如何获取工作参数从ItemReader,在Spring Batch?

这是我的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) {
    //...
  }
}

默认情况下,此范围不可用,但是如果您正在使用批处理XML命名空间。如果你不是,添加以下到您的Spring配置将使范围可用,根据Spring Batch documentation

<bean class="org.springframework.batch.core.scope.StepScope" />
http://stackoverflow.com/questions/6078009/how-to-get-access-to-job-parameters-from-itemreader-in-spring-batch

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 如何获取工作参数从ItemReader,在Spring Batch?