zoukankan      html  css  js  c++  java
  • SpringBoot基于数据库的定时任务统一管理

    定时任务1

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

    定时任务2

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

    配置类

    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.SchedulingConfigurer;
    import org.springframework.scheduling.config.CronTask;
    import org.springframework.scheduling.config.ScheduledTask;
    import org.springframework.scheduling.config.ScheduledTaskRegistrar;
    
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;
    
    
    /**
     * @author Created by niugang on 2019/12/24/15:19
     */
    @Configuration
    @EnableScheduling
    @Slf4j
    public class CompleteScheduleConfig implements SchedulingConfigurer {
    
        private static List<TaskRecord> taskRecordList = new ArrayList<>();
    
    
        /*
         *模拟数据库存储
         */
        static {
            TaskRecord taskRecord = new TaskRecord();
            taskRecord.setExecuteMehod("task1");
            taskRecord.setClassPath("com.example.demo.pojo.TaskTest");
            taskRecord.setCron("0/5 * * * * ?");
            taskRecordList.add(taskRecord);
    
            TaskRecord taskRecord2 = new TaskRecord();
            taskRecord2.setExecuteMehod("task2");
            taskRecord2.setClassPath("com.example.demo.pojo.TaskTest2");
            taskRecord2.setCron("0/10 * * * * ?");
            taskRecordList.add(taskRecord2);
        }
    
    
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            // taskRegistrar.addCronTask(() -> log.info("执行定时任务,{}", LocalDateTime.now()), "0/5 * * * * ?");
    /*        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 * * * * ?");*/
    
            for (TaskRecord taskRecord : taskRecordList) {
                String classPath = taskRecord.getClassPath();
                String cron = taskRecord.getCron();
                String executeMehod = taskRecord.getExecuteMehod();
                Runnable runnable = () -> {
                    Class<?> aClass;
                    try {
                        aClass = Class.forName(classPath);
                        Object o = aClass.newInstance();
                        Method[] declaredMethods = aClass.getDeclaredMethods();
                        for (Method declaredMethod : declaredMethods) {
                            if (declaredMethod.getName().equals(executeMehod)) {
                                /// log.info("方法名称:{}",declaredMethod.getName());
                                declaredMethod.invoke(o);
                            }
                        }
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                };
                CronTask cronTask = new CronTask(runnable, cron);
                ScheduledTask scheduledTask = taskRegistrar.scheduleCronTask(cronTask);
                //scheduledTask.cancel();  取消定时任务
    
            }
    
    
        }
    
    
        @Data
        private static class TaskRecord {
    
            private String classPath;
    
            private String executeMehod;
    
            private String cron;
    
            //可以在增加一个type 执行其他类型的定时任务
        }
    }
    
    

    微信公众号
    JAVA程序猿成长之路

  • 相关阅读:
    Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录
    物理路径,相对路径,绝对路径以及根目录
    其他ip无法访问Yii的gii,配置ip就可以
    move_uploaded_file() 函数
    DetailView内匿名函数不可用
    instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例 , 返回true或者false
    php 判断变量函数
    [HNOI2008] GT考试
    [Bzoj1006][HNOI2008]神奇的国度
    [BZOJ 1005] 明明的烦恼
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12187033.html
Copyright © 2011-2022 走看看