需求:
- 异步的请求频率太高需要限制请求
进程:
- 创建对应的异步线程
package config; 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; @Configuration @EnableAsync public class RunTestJobThreadPoolTask { @Bean("AsyncRunTestJobThread") public Executor asyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //核心线程数:线程池创建时候初始化的线程数 executor.setCorePoolSize(1); //最大线程数:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程 executor.setMaxPoolSize(1); //缓冲队列:用来缓冲执行任务的队列 executor.setQueueCapacity(500); //允许线程的空闲时间:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁 executor.setKeepAliveSeconds(24*60*60); //线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池 executor.setThreadNamePrefix("AsyncRunTestJobThread-"); executor.initialize(); return executor; } }
- 在异步方法上加上对应的注解
@Async("AsyncRunTestJobThread")