【问题标题】:Spring Batch optional or conditional MultithreadingSpring Batch 可选或有条件的多线程
【发布时间】:2020-05-18 15:57:07
【问题描述】:

我正在使用 JdbcPagingItemReader 和 JdbcBatchItemWriter 实现 Spring Batch。我已经使用 TaskExecutor 来实现使用 setConcurrencyLimit 的多线程。但是我可能不是每次都有大数据,那我可以根据需要实现多线程吗?就像使用参数打开和关闭它一样?

【问题讨论】:

    标签: multithreading spring-batch


    【解决方案1】:

    您可以将 SimpleAsyncTaskExecutor 添加到步骤配置中以使其成为多线程。下面是 Step config 的示例 sn-p,您可以在其中控制有条件地添加 TaskExecutor,

        @Bean
        public Step testStepConfig() {
    
           boolean multiThreadingRequired = false; // It can be picked from the external config
    
           AbstractTaskletStepBuilder<SimpleStepBuilder<String, Data>> stepConfig = stepBuilderFactory
                .get("testStep").<String, Data>chunk(10)
                .reader(reader()).processor(processor()).writer(writer())
                .faultTolerant().retryLimit(3)
                .listener(testStepListener());
    
           if (multiThreadingRequired) {
               stepConfig.taskExecutor(taskExecutor());
           }
    
           return stepConfig.build();
       }
    
    
       @Bean
       public TaskExecutor taskExecutor() {
           SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
           taskExecutor.setConcurrencyLimit(deleteTenantsMaxThreads);
           return taskExecutor;
       }
    

    【讨论】:

    • 谢谢。我使用了 ApplicationArguments 并通过命令行参数传递它们。这种方法也有效。
    • @ThinkCode 太好了:)
    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2018-08-13
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多