异步配置类
@Configuration @ConditionalOnProperty(value = "guigu.async.enable", havingValue = "true") @EnableAsync public class AsyncConfig { private static final Logger log = LoggerFactory.getLogger(AsyncConfig.class); @Value("${guigu.async.core-pool-size:5}") private int corePoolSize; @Value("${guigu.async.queue-capacity:10}") private int queueCapacity; @Value("${guiugu.async.max-pool-size:25}") private int maxPoolSize; @Value("${guigu.async.keepalive-seconds:10}") private int threadTimeout; @Primary @Bean public AsyncTaskExecutor myAsyncExecutor() { log.info(">> 初始化spring异步任务线程池 - myAsyncExecutor: coore={},max={},queue={}", corePoolSize, maxPoolSize, queueCapacity); ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); // 当一个任务通过execute(Runnable)方法欲添加到线程池时: // - 若线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也创建新的线程来处理被添加的任务。 // - 若线程池中的数量等于corePoolSize,但缓冲队列workQueue未满,则任务被放入缓冲队列。 // - 若线程池中的数量大于corePoolSize,缓冲队列workQueue满,且线程池中的数量小于maximumPoolSize,则创建新线程来处理被添加的任务。 // - 若线程池中的数量大于corePoolSize,缓冲队列workQueue满,且线程池中的数量等于maximumPoolSize,则通过handler所指定的策略来处理此任务。 // 即:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,若三者都满,则使用handler处理被拒绝的任务。 // - 若线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。 // 线程池维护线程的最少数量 threadPoolTaskExecutor.setCorePoolSize(corePoolSize); // 线程池维护线程的最大数量 threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize); // 线程池所使用的缓冲队列 threadPoolTaskExecutor.setQueueCapacity(queueCapacity); // 线程池维护线程所允许的空闲时间 threadPoolTaskExecutor.setKeepAliveSeconds(threadTimeout); // don't forget to initialize the thread pool threadPoolTaskExecutor.initialize(); return threadPoolTaskExecutor; } @Bean public AsyncUncaughtExceptionHandler myAsyncUncaughtExceptionHandler() { return (throwable, method, params) -> { String methodName = method.getDeclaringClass().getName() + method.getName(); log.error(">> 异步执行错误: {}({})", methodName, params, throwable); }; } }
使用异步注解
@Async @Scheduled(cron = "* * * * * ?") public void hello() throws InterruptedException { log.info("hello..."); Thread.sleep(3000); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?