ScheduleConfig.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package org.dbsyncer.web.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.scheduling.annotation.SchedulingConfigurer;
  5. import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
  6. import org.springframework.scheduling.config.ScheduledTaskRegistrar;
  7. import java.util.concurrent.RejectedExecutionHandler;
  8. /**
  9. * @author yjwang
  10. * @date 2022/4/29 10:27
  11. */
  12. @Configuration
  13. public class ScheduleConfig implements SchedulingConfigurer {
  14. @Override
  15. public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
  16. scheduledTaskRegistrar.setTaskScheduler(taskScheduler());
  17. }
  18. @Bean(name = "taskScheduler", destroyMethod = "shutdown")
  19. public ThreadPoolTaskScheduler taskScheduler() {
  20. int poolSize = Runtime.getRuntime().availableProcessors() * 2;
  21. ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
  22. //核心线程池大小
  23. scheduler.setPoolSize(poolSize);
  24. //线程名字前缀
  25. scheduler.setThreadNamePrefix("taskScheduler-");
  26. //设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
  27. scheduler.setWaitForTasksToCompleteOnShutdown(true);
  28. //设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住
  29. scheduler.setAwaitTerminationSeconds(60);
  30. // 线程池满,拒绝策略
  31. scheduler.setRejectedExecutionHandler(rejectedExecutionHandler());
  32. return scheduler;
  33. }
  34. public RejectedExecutionHandler rejectedExecutionHandler() {
  35. return (r, executor) -> {
  36. try {
  37. executor.getQueue().put(r);
  38. } catch (InterruptedException e) {
  39. e.printStackTrace();
  40. }
  41. };
  42. }
  43. }