SpringBoot基于数据库的定时任务统一管理

客官°小女子只卖身不卖艺 2023-06-25 02:30 123阅读 0赞

定时任务1

  1. import lombok.extern.slf4j.Slf4j;
  2. /** * @author Created by niugang on 2019/12/24/15:29 */
  3. @Slf4j
  4. public class TaskTest {
  5. public void task1() {
  6. log.info("反射调用测试[一]类");
  7. }
  8. }

定时任务2

  1. import lombok.extern.slf4j.Slf4j;
  2. /** * @author Created by niugang on 2019/12/24/15:54 */
  3. @Slf4j
  4. public class TaskTest2 {
  5. public void task2() {
  6. log.info("反射调用测试[二]类");
  7. }
  8. }

配置类

  1. import lombok.Data;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.scheduling.annotation.EnableScheduling;
  5. import org.springframework.scheduling.annotation.SchedulingConfigurer;
  6. import org.springframework.scheduling.config.CronTask;
  7. import org.springframework.scheduling.config.ScheduledTask;
  8. import org.springframework.scheduling.config.ScheduledTaskRegistrar;
  9. import java.lang.reflect.Method;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. /** * @author Created by niugang on 2019/12/24/15:19 */
  13. @Configuration
  14. @EnableScheduling
  15. @Slf4j
  16. public class CompleteScheduleConfig implements SchedulingConfigurer {
  17. private static List<TaskRecord> taskRecordList = new ArrayList<>();
  18. /* *模拟数据库存储 */
  19. static {
  20. TaskRecord taskRecord = new TaskRecord();
  21. taskRecord.setExecuteMehod("task1");
  22. taskRecord.setClassPath("com.example.demo.pojo.TaskTest");
  23. taskRecord.setCron("0/5 * * * * ?");
  24. taskRecordList.add(taskRecord);
  25. TaskRecord taskRecord2 = new TaskRecord();
  26. taskRecord2.setExecuteMehod("task2");
  27. taskRecord2.setClassPath("com.example.demo.pojo.TaskTest2");
  28. taskRecord2.setCron("0/10 * * * * ?");
  29. taskRecordList.add(taskRecord2);
  30. }
  31. @Override
  32. public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  33. // taskRegistrar.addCronTask(() -> log.info("执行定时任务,{}", LocalDateTime.now()), "0/5 * * * * ?");
  34. /* taskRegistrar.addCronTask(new Runnable() { @Override public void run() { try { Class<?> aClass = Class.forName("com.example.demo.pojo.TaskTest"); Object o = aClass.newInstance(); Method[] declaredMethods = aClass.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { declaredMethod.invoke(o); // log.info("方法名称:{}",declaredMethod.getName()); } } catch (Exception e) { e.printStackTrace(); } } }, "0/5 * * * * ?");*/
  35. for (TaskRecord taskRecord : taskRecordList) {
  36. String classPath = taskRecord.getClassPath();
  37. String cron = taskRecord.getCron();
  38. String executeMehod = taskRecord.getExecuteMehod();
  39. Runnable runnable = () -> {
  40. Class<?> aClass;
  41. try {
  42. aClass = Class.forName(classPath);
  43. Object o = aClass.newInstance();
  44. Method[] declaredMethods = aClass.getDeclaredMethods();
  45. for (Method declaredMethod : declaredMethods) {
  46. if (declaredMethod.getName().equals(executeMehod)) {
  47. /// log.info("方法名称:{}",declaredMethod.getName());
  48. declaredMethod.invoke(o);
  49. }
  50. }
  51. } catch (Exception e1) {
  52. e1.printStackTrace();
  53. }
  54. };
  55. CronTask cronTask = new CronTask(runnable, cron);
  56. ScheduledTask scheduledTask = taskRegistrar.scheduleCronTask(cronTask);
  57. //scheduledTask.cancel(); 取消定时任务
  58. }
  59. }
  60. @Data
  61. private static class TaskRecord {
  62. private String classPath;
  63. private String executeMehod;
  64. private String cron;
  65. //可以在增加一个type 执行其他类型的定时任务
  66. }
  67. }

微信公众号
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,123人围观)

还没有评论,来说两句吧...

相关阅读