vue+SpringBoot前后端分离定时任务可视化(附源码)

前言

        定时任务是开发者在开发过程中所接触较多的事项之一,有些时候我们需要定时去做一件事情,如果周期不是很短,那么手动维护或许可以解决,如果周期很短,比如每隔5秒就要执行一次的时候,我们再去手动维护明显力不从心。对于某些用户而言,需要定时去访问一些数据,例如你是局域网用户,需要定时访问为你提供接口的数据,那么这个时候就需要用到定时器了。

        本项目采用vue+SpringBoot前后端分离开发,当然可以在后续进行合并打包,或者部署为exe程序。我们这里不去讲如何部署,仅对代码进行讲解。

前端部分

         这是页面展示,在这个页面可以对任务的执行类进行维护,同时也可以维护任务表达式。当然这个页面并不是重点,重点在后端。

后端部分

        直接上代码,如果有不全的地方,在源码中都可以找到

@Service
public class HutoolTimerExeServiceImpl implements TimerExpService {
    private static final Log log = Log.get();
    @Override
    public void startTimer(String taskId, String cron, String timerClass) {
        if (ObjectUtil.hasEmpty(taskId, cron, timerClass)) {
            System.out.println("请检查定时器的id,定时器cron表达式,定时任务是否为空!");

        }

        // 预加载类看是否存在此定时任务类
        try {
            Class.forName(timerClass);
        } catch (ClassNotFoundException e) {
            System.out.println("定时任务执行类不存在");
        }
        // 定义hutool的任务
        Task task = () -> {
            try {
                TimerTaskRunner timerTaskRunner = (TimerTaskRunner) SpringUtil.getBean(Class.forName(timerClass));
                timerTaskRunner.action();
            } catch (ClassNotFoundException | IOException e) {
                log.error(">>> 任务执行异常:{}", e.getMessage());
            }
        };

        // 开始执行任务
        CronUtil.schedule(taskId, cron, task);

    }

    @Override
    public void stopTimer(String taskId) {
        CronUtil.remove(taskId);
    }
}
public class TimerTaskRunListener implements ApplicationListener<ApplicationStartedEvent>, Ordered {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {

        TimerService timerService = SpringUtil.getBean(TimerService.class);
        TimerExpService timerExeService = SpringUtil.getBean(TimerExpService.class);

        // 获取所有开启状态的任务
        TimerParam timerParam = new TimerParam();
        timerParam.setStat(TimerEnum.RUNNING.getCode());
        List<Timer> list = timerService.list(timerParam);

        // 添加定时任务到调度器
        for (Timer timer : list) {
            timerExeService.startTimer(String.valueOf(timer.getId()), timer.getCron(), timer.getTimerClass());
        }

        // 设置秒级别的启用
        CronUtil.setMatchSecond(true);

        // 启动定时器执行器
        CronUtil.start();
    }

    @Override
    public int getOrder() {
        return LOWEST_PRECEDENCE;
    }
}

        需要注意的是,一定要在resources文件夹下,新建一个名称为META-INF的文件夹,并创建名称为spring.factories的文件,文件中这样写

org.springframework.context.ApplicationListener=\
com.example.config.TimerTaskRunListener

        只有这样你的定时任务才会被发现。

源码地址

链接:https://pan.baidu.com/s/1QvBnBSogO72AwzFrIr6xIg 
提取码:ABCD

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值