批处理为多线程时,无法再注入带有@JobScope的@Bean

时间:2019-07-01 15:11:52

标签: java spring spring-batch

给出以下工作职位。

@Bean
public Step mergeStep(
        TaskExecutor taskExecutor,
        ItemWriter<InboundDetail> writer,
        JobWriteNotificationListener writeListener) {
    return stepBuilderFactory.get("mergeStep")
            .<InboundDetail, InboundDetail>chunk(50)
            .reader(inboundDetailReader())
            .writer(writer)
            .listener(writeListener)
            //  .taskExecutor(taskExecutor)
            //  .throttleLimit(4)
            .build();
}

和一个读者@JobScope正在使用的带有@JobScope public class FunkyBean { } 的bean。

taskExecutor

如果重新注释了throttleLimitTaskExecutor,则由于线程不再属于作业范围,因此无法再解决依赖关系。

在这种情况下,@Bean TaskExecutor taskExecutor() { return new SimpleAsyncTaskExecutor(); } 是:

@JobScope

我认为这是一个错误,但是我知道如何实现。

是否存在一种解决方法,可以在存在多个线程的情况下获取作业状态?

我目前在阅读器/写入器中使用JobExecutionListenerSupport bean和一个=REGEXMATCH(A2,B2&"(,|$)") 组件。

  

作用域“作业”对于当前线程无效;如果您打算从单例中引用它,请考虑为此bean定义作用域代理。嵌套的异常是java.lang.IllegalStateException:

0 个答案:

没有答案