Escenarios de aplicación de grupos de subprocesos:
Incrustar notificaciones/anomalías de correo en el servicio a través de alarmas del sistema de mensajes, etc.
Minimice los servicios sin importancia que afectan la eficiencia del servicio original y necesitan usar el grupo de subprocesos para llamar de forma asíncrona
paso:
1. La clase de inicio configura el grupo de subprocesos para habilitar la anotación
@EnableAsyn
2. Opcional: configure la clase de configuración (si no coincide, será la predeterminada)
package com.a;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
@EnableAsync
public class ExecutorConfig {
private int corePoolSize = 10;
private int maxPoolSize = 200;
private int queueCapacity = 100;
public static final String EXECUTORE_COMMON = "commonExecutor";
public static final String EXECUTOR_MAIL = "mailExecutor";
@Bean
public Executor mailExecutor() {
return configExecutor(EXECUTOR_MAIL); }
@Bean
public Executor commonExecutor() {
return configExecutor("commonExecutor");
}
private Executor configExecutor(String threadNamePrefix) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setThreadNamePrefix(threadNamePrefix);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
3. Use la anotación **@Async** en el método que debe ser asíncrono. El método no puede ser privado.
Si usa la configuración de la clase de configuración, agregue el nombre del bean de la configuración correspondiente,
como @Async( "correoEjecutor")
4. Preste atención a la escritura de registros
, como la apertura y el cierre del grupo de subprocesos, el contenido del envío de correos electrónicos, el resultado del envío de correos electrónicos, etc., además de los registros.