SpringBoot + 异步任务线程池满拒绝策略优化:默认 AbortPolicy 导致请求丢失?
一、线程池满的痛点 上周,一位做电商系统的朋友向我求助:他们的订单履约系统在高峰期经常丢失订单,导致大量用户投诉。 "我们使用了异步任务来处理订单,"朋友焦急地说,"但高峰期总是有任务被丢弃,订单状态一直处于'处理中',用户频繁投诉。" 我查看了他们的代码,发现问题确实很严重: 系统使用 @Async 注解处理异步任务 线程池核心线程数 10,最大线程数 20 使用默认的 AbortPolicy 拒绝策略 高峰期任务提交速度超过处理速度 被拒绝的任务直接被丢弃,没有任何记录 更关键的是,他们根本不知道有多少任务被丢弃,是被丢弃了还是正在排队? 二、传统方案的局限性 1. 默认 AbortPolicy 当线程池满了,新任务会被直接拒绝并抛出 RejectedExecutionException。 @Bean(name = "taskExecutor") public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePool....