Escenas
Implementación de tareas de sincronización y tareas de sincronización asincrónicas en SpringBoot:
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.