欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

动态停止 CAD加密 相关任务

点击: 次  来源:昆山软开发 时间:2018-09-16

原文出处: oKong

媒介

上两章节,我们简朴的讲授了关于异法式用和异步请求相关常识点。这一章节,我们来讲讲开拓进程也是常常会遇见的按时任务。好比天天按时清理无效数据、按时发送短信、按时发送邮件、付出系统中的按时对账等等,往往城市界说一些按时器,举办此业务的开拓。所以,本章节先容下在SpringBoot中按时任务如何利用及一点漫衍式按时处事的思考总结。

一点常识

JAVA开拓规模,今朝可以通过以下几种方法举办按时任务:

  • Timer:jdk中自带的一个按时调治类,可以简朴的实现按某一频度举办任务执行。提供的成果较量单一,无法实现巨大的调治任务。
  • ScheduledExecutorService:也是jdk自带的一个基于线程池设计的按时任务类。其每个调治任务城市分派到线程池中的一个线程执行,所以其任务是并发执行的,互不影响。
  • Spring Task:Spring提供的一个任务调治东西,支持注解和设置文件形式,支持Cron表达式,利用简朴但成果强大。
  • Quartz:一款成果强大的任务调治器,可以实现较为巨大的调治成果,如每月一号执行、天天破晓执行、每周五执行等等,还支持漫衍式调治,就是设置稍显巨大。
  • 题外话:对付Quartz,早前用过1.6版本的,更新到2.x及以上版本后根基没怎么打仗了,本来尚有倒腾过团结Kettle做了一些动态的按时抽取数据啥的还编写过一个Cron表达式编辑器,此刻根基健忘了。。等有时机,再次深入进修后再来单独分享一些关于的Quartz心得吧。

    基于JDK方法实现简朴按时

    方才有先容过,基于JDK方法一共有两种:TimerScheduledExecutorService。接下来,就简朴讲授下这两种方法。

    Timer

    Timer是jdk提供的java.util.Timer类。

    简朴示例:

    @GetMapping("/timer")
    public String doTimer() {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            
            @Override
            public void run() {
                log.info("Timer按时任务启动:" + new Date());
                
            }
        }, 1000,1000);//延迟1秒启动,每1秒执行一次
        return "timer";

    启动后,会见即可瞥见节制台周期性输出信息了:

    2018-08-18 21:30:35.171  INFO 13352 --- [        Timer-0] c.l.l.s.c.controller.TaskController      : Timer按时任务启动:Sat Aug 18 21:30:35 CST 2018
    2018-08-18 21:30:36.173  INFO 13352 --- [        Timer-0] c.l.l.s.c.controller.TaskController      : Timer按时任务启动:Sat Aug 18 21:30:36 CST 2018
    2018-08-18 21:30:37.173  INFO 13352 --- [        Timer-0] c.l.l.s.c.controller.TaskController      : Timer按时任务启动:Sat Aug 18 21:30:37 CST 2018
    2018-08-18 21:30:38.173  INFO 13352 --- [        Timer-0] c.l.l.s.c.controller.TaskController      : Timer按时任务启动:Sat Aug 18 21:30:38 CST 2018
    2018-08-18 21:30:39.174  INFO 13352 --- [        Timer-0] c.l.l.s.c.controller.TaskController      : Timer按时任务启动:Sat Aug 18 21:30:39 CST 2018
    ......

    相关API简朴说明:

    1、在特按时间执行任务,只执行一次

    public void schedule(TimerTask task,Date time)

    2、在特按时间之后执行任务,只执行一次

    public void schedule(TimerTask task,long delay)

    3、指定第一次执行的时间,然后凭据隔断时间,反复执行

    public void schedule(TimerTask task,Date firstTime,long period)

    4、在特定延迟之后第一次执行,然后凭据隔断时间,反复执行

    public void schedule(TimerTask task,long delay,long period)

    5、第一次执行之后,特定频率执行,与3同

    public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

    6、在delay毫秒之后第一次执行,后凭据特定频率执行

    public void scheduleAtFixedRate(TimerTask task,long delay,long period)

    参数:

  • delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行
  • period:反复执行的时距离断
  • 打消任务利用:timer.cancel()要领即可注销任务。

    此类相对用的较少了,简朴相识下。

    ScheduledExecutorService

    ScheduledExecutorService可以说是Timer的替代类,因为Timer不支持多线程,任务是串行的,并且也不捕捉异常,假设某个任务异常了,整个Timer就无法运行了。