Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Spring批处理可选或条件多线程_Multithreading_Spring Batch - Fatal编程技术网

Multithreading Spring批处理可选或条件多线程

Multithreading Spring批处理可选或条件多线程,multithreading,spring-batch,Multithreading,Spring Batch,我正在使用JdbcPagingItemReader和JdbcBatchItemWriter实现Spring批处理。我使用TaskExecutor使用SetConcurrencyLit实现了多线程。但我可能不是每次都有大量数据,所以我可以根据需要实现多线程吗?像使用参数打开和关闭它一样?您可以将SimpleAsyncTaskExecutor添加到步骤配置中,使其成为多线程的。下面是步骤配置的一个示例片段,您可以在其中控制有条件地添加TaskExecutor @Bean public

我正在使用JdbcPagingItemReader和JdbcBatchItemWriter实现Spring批处理。我使用TaskExecutor使用SetConcurrencyLit实现了多线程。但我可能不是每次都有大量数据,所以我可以根据需要实现多线程吗?像使用参数打开和关闭它一样?

您可以将SimpleAsyncTaskExecutor添加到步骤配置中,使其成为多线程的。下面是步骤配置的一个示例片段,您可以在其中控制有条件地添加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;
   }
@Bean
公共步骤testStepConfig(){
boolean multiThreadingRequired=false;//可以从外部配置中选择
AbstractTaskletStepBuilder stepConfig=stepBuilderFactory
.get(“testStep”).chunk(10)
.reader(reader()).processor(processor()).writer(writer())
.faultTolerant().retryLimit(3)
.listener(testStepListener());
if(需要多线程){
taskExecutor(taskExecutor());
}
返回stepConfig.build();
}
@豆子
公共任务执行器任务执行器(){
SimpleAsyncTaskExecutor taskExecutor=新的SimpleAsyncTaskExecutor();
setConcurrencyLit(deleteTenantsMaxThreads);
返回任务执行器;
}

您可以将SimpleAsyncTaskExecutor添加到步骤配置中,使其成为多线程的。下面是步骤配置的一个示例片段,您可以在其中控制有条件地添加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;
   }
@Bean
公共步骤testStepConfig(){
boolean multiThreadingRequired=false;//可以从外部配置中选择
AbstractTaskletStepBuilder stepConfig=stepBuilderFactory
.get(“testStep”).chunk(10)
.reader(reader()).processor(processor()).writer(writer())
.faultTolerant().retryLimit(3)
.listener(testStepListener());
if(需要多线程){
taskExecutor(taskExecutor());
}
返回stepConfig.build();
}
@豆子
公共任务执行器任务执行器(){
SimpleAsyncTaskExecutor taskExecutor=新的SimpleAsyncTaskExecutor();
setConcurrencyLit(deleteTenantsMaxThreads);
返回任务执行器;
}

谢谢。我使用了ApplicationArguments,并通过命令行参数传递它们。这种方法也有效。@ThinkCode太好了:)谢谢。我使用了ApplicationArguments,并通过命令行参数传递它们。这种方法也很有效。@ThinkCode太棒了:)