ScheduledConfig.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package com.fdkankan.scene.config;
  2. import org.springframework.boot.autoconfigure.batch.BatchProperties;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.scheduling.TaskScheduler;
  6. import org.springframework.scheduling.annotation.Scheduled;
  7. import org.springframework.scheduling.annotation.SchedulingConfigurer;
  8. import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
  9. import org.springframework.scheduling.config.ScheduledTaskRegistrar;
  10. import org.springframework.util.CollectionUtils;
  11. import java.lang.reflect.Method;
  12. import java.util.Arrays;
  13. import java.util.concurrent.Executors;
  14. @Configuration
  15. public class ScheduledConfig implements SchedulingConfigurer {
  16. /**
  17. * 此配置实现:
  18. * 1、同一个定时任务等待上一次执行完毕后再执行
  19. * 2、不同定时任务同时执行
  20. * @param taskRegistrar
  21. */
  22. @Override
  23. public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  24. Method[] methods = BatchProperties.Job.class.getMethods();
  25. int defaultPoolSize = 3;
  26. int corePoolSize = 0;
  27. if (!CollectionUtils.isEmpty(Arrays.asList(methods))) {
  28. for (Method method : methods) {
  29. Scheduled annotation = method.getAnnotation(Scheduled.class);
  30. if (annotation != null) {
  31. corePoolSize++;
  32. }
  33. }
  34. if (defaultPoolSize > corePoolSize) {
  35. corePoolSize = defaultPoolSize;
  36. }
  37. taskRegistrar.setScheduler(Executors.newScheduledThreadPool(corePoolSize));
  38. }
  39. }
  40. }