java - "Step"或 "Job"Spring-Batch bean 的范围?

标签 java spring batch-processing spring-batch

我正在使用 Spring-Batch v3.0.0 进行批量导入。有一个 StepScope 和一个 JobScope。我怎么知道它们中的哪一个是合适的?

例如,如果我定义了一个应该使用特定 EntityManager 的自定义 ItemReaderItemWriter,它可能如下所示:

@Bean
@Scope("step") //@Scope("job") //custom scope required to inject #jobParameters
public JpaItemWriter<T> jpaItemWriter(EntityManagerFactory emf) {
    JpaItemWriter<T> writer = new JpaItemWriter<T>();
    writer.setEntityManagerFactory(emf);
    return writer;
}

但是这里的范围是什么?为什么?

使用 step 范围执行是可行的,但我觉得 itemWriters 可能应该属于 job 范围,这样它们就不会在每一步都重新创建。

我尝试将 step 切换到 job,但这会引发以下错误: 线程“main”java.lang.IllegalStateException 中的异常:没有为范围“job”注册范围

最佳答案

从 Spring-Batch v3.0.1 开始,您可以使用 @JobScope

Marking a @Bean as @JobScope is equivalent to marking it as @Scope(value="job", proxyMode=TARGET_CLASS)

关于java - "Step"或 "Job"Spring-Batch bean 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24017673/

相关文章:

java - 如何增加 ODBC 中的字符限制

java - 在更新操作中访问先前的实体

azure - 运行长时间运行流程的最佳且具有成本效益的方式

java - Java程序有字符串和编译错误

java - RESTEasy 客户端框架身份验证凭据

java - 无法修复空指针异常

java - 步骤链接的说明

java - 命名参数不适用于 MySql LIKE 语句

java - 如何正确从 Dropwizard 指标切换到 Micrometer?

r - 为 13K pdf 文档运行 for 循环时出现空间不足错误