import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Bean(name = "taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5); // 核心线程数
executor.setMaxPoolSize(10); // 最大线程数
executor.setQueueCapacity(25); // 队列容量
executor.setKeepAliveSeconds(60); // 线程空闲时间(单位:秒)
executor.setThreadNamePrefix("Async-"); // 线程名称前缀
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
// 自定义异步任务异常处理器
return null;
}
}
@Service
public class AsyncService {
@Async("taskExecutor") // 指定使用名为"taskExecutor"的线程池
public void asyncMethod() {
// 异步执行的代码
}
}
在Spring框架中,@EnableAsync
注解用于启用异步方法执行的支持。无论是将@EnableAsync
放在配置类上,还是放在主程序类上,它们的效果是一样的,都是全局启用异步执行