1

我最近将我的 Spring Boot 应用程序 2.1.9 更新到 2.2.0,我遇到了一个问题。当我从执行器端点调用“configprops”时,抛出异常:范围'job'对于当前线程不是活动的

我重现了这个错误:https ://github.com/guillaumeyan/bugspringbatch (只需启动测试)。原始项目来自https://github.com/spring-guides/gs-batch-processing/tree/master/complete

我试图添加:

  @Bean
  public StepScope stepScope() {
    final StepScope stepScope = new StepScope();
    stepScope.setAutoProxy(true);
    return stepScope;
  }

但它不起作用(使用 spring.main.allow-bean-definition-overriding=true)

这是我对spring批处理的配置

  @Bean
  @JobScope
  public RepositoryItemReader<DossierEntity> dossierToDiagnosticReader(PagingAndSortingRepository<DossierEntity, Long> dossierJpaRepository, @Value("#{jobParameters[origin]}") String origin) {
    RepositoryItemReader<DossierEntity> diagnosticDossierReader = new RepositoryItemReader<>();
    diagnosticDossierReader.setRepository(dossierJpaRepository);
    diagnosticDossierReader.setMethodName("listForBatch");
    // doing some stuff with origin
    return diagnosticDossierReader;
  }
ExceptionHandlerExceptionResolver[199] - Resolved [org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'scopedTarget.dossierToDiagnosticReader': Scope 'job' is not active for the current thread; 
consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No context holder available for job scope]
4

2 回答 2

1

我下载了你的项目并且能够重现这个案例。您的示例有两个问题:

  • 您正在应用程序中定义作业范围 bean,但未JobScope在您的上下文中定义(并且您没有使用@EnableBatchProcessing将其自动添加到上下文的注释)。如果要使用不带 的作业范围@EnableBatchProcessing,则需要手动将其添加到上下文中。
  • 您的测试失败,因为在您的测试期间没有任何作业正在运行。当作业实际运行时,作业范围的 bean 会延迟实例化。由于您的测试没有开始工作,因此无法正确代理 bean。

您的测试似乎没有测试批处理作业,我会从测试的上下文中排除作业范围的 bean。

于 2019-10-21T07:56:04.043 回答
0

Spring Boot 2.2.1 中的错误解决https://github.com/spring-projects/spring-boot/issues/18714

于 2019-10-24T07:00:33.820 回答