• 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 执行其他类型的定时任务
        }
    }
    
    

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

  • 相关阅读:
    Centos7 系统更改apache默认网站目录(解决You don't have permission to access / on this server问题)
    1-18-2 LVM管理和ssm存储管理器使用&磁盘配额 (二)
    1-3 RHEL7操作系统的安装
    1-18-1 LVM管理和ssm存储管理器使用&磁盘配额(一)
    【转载】CentOS7下使用LVM给系统硬盘扩容
    自动备份Mysql数据库脚本
    docker安装nginx并配置通过https访问
    搭建本地yum源和局域网yum源
    【转载】使用Docker Hub官方gcc:latest镜像编译C/C++程序以及缩小镜像的方法
    【转载】如何使用docker部署c/c++程序
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12185762.html
Copyright © 2020-2023  润新知