Las tareas cronometradas en SpringBoot permiten subprocesos múltiples para evitar el bloqueo de tareas múltiples

Escenas

Implementación de tareas de sincronización y tareas de sincronización asincrónicas en SpringBoot:

Realización de tareas de sincronización y tareas de sincronización asincrónicas en SpringBoot: se busca programador

Utilice el método nativo SpringBoot para implementar tareas de sincronización y se ha habilitado el soporte de subprocesos múltiples. El anterior es uno de los métodos.

Además, también se pueden utilizar los siguientes métodos.

¿Por qué las tareas de sincronización de Spring Boot son de un solo subproceso?

Consulte la anotación del código fuente @EnableScheduling para ver

    protected void scheduleTasks() {
        if (this.taskScheduler == null) {
            this.localExecutor = Executors.newSingleThreadScheduledExecutor();
            this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor);
        }

 

Para verificar un solo hilo, escriba un método de prueba que simule el bloqueo

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit;

@Component
@EnableScheduling
public class TestTask {

    @Scheduled(fixedRateString = "15000")
    public void  test1() throws InterruptedException {
        System.out.println("task1:"+LocalDateTime.now());
        //moni  yanchi
        TimeUnit.SECONDS.sleep(10);
    }

    @Scheduled(fixedRateString = "3000")
    public void  test2() {
        System.out.println("task2:"+LocalDateTime.now());
    }
}

Resultados de la

Nota:

Blog:
Domineering Rogue Temperament_C#, Architecture Road, Blog SpringBoot-CSDN

lograr

1. Opción 1

Spring Boot quartz ya proporciona una configuración para configurar el tamaño del grupo de subprocesos

Agregue la siguiente configuración

spring:
  task:
    scheduling:
      pool:
        size: 10

La prueba de bloqueo se realizó nuevamente y resultó normal.

2. Esquema 2

SiguienteSchedulingConfigurer#configureTasks()

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.Executors;

//直接实现SchedulingConfigurer这个接口,设置taskScheduler
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
    }
}

3. Esquema 3

Consulte la forma de combinar @Async arriba.

Supongo que te gusta

Origin blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131936994
Recomendado
Clasificación