spring 定时任务 taskScheduler详解

spring 定时任务 taskScheduler详解spring3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态。也可以使用cron表达式设置定时任务。1、被执行的类要实现Runnable接口2、TaskScheduler任务调度接口TaskScheduler是一个接口TaskScheduler接口下定义了6个方法schedule(Runnabletas

大家好,欢迎来到IT知识分享网。

spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态。也可以使用cron表达式设置定时任务。

1、被执行的类要实现Runnable接口

2、TaskScheduler 任务调度接口

TaskScheduler是一个接口

TaskScheduler接口下定义了6个方法
spring 定时任务 taskScheduler详解

  • schedule(Runnable task, Trigger trigger);
    指定一个触发器执行定时任务。可以使用CronTrigger来指定Cron表达式,执行定时任务

     CronTrigger t = new CronTrigger("0 0 10,14,16 * * ?");
     taskScheduler.schedule(this, t);
  • schedule(Runnable task, Date startTime);
    指定一个具体时间点执行定时任务,可以动态的指定时间,开启任务。只执行一次。(比Timer好用多了。早发现这接口就好了。。。)
  • scheduleAtFixedRate(Runnable task, long period);
    立即执行,循环任务,指定一个执行周期(毫秒计时)
    PS:不管上一个周期是否执行完,到时间下个周期就开始执行
  • scheduleAtFixedRate(Runnable task, Date startTime, long period);
    指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)
    PS:不管上一个周期是否执行完,到时间下个周期就开始执行
  • scheduleWithFixedDelay(Runnable task, long delay);
    立即执行,循环任务,指定一个间隔周期(毫秒计时)
    PS:上一个周期执行完,等待delay时间,下个周期开始执行
  • scheduleWithFixedDelay(Runnable task, Date startTime, long delay);
    指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)
    PS:上一个周期执行完,等待delay时间,下个周期开始执行

3、TaskScheduler下有五个实现类
spring 定时任务 taskScheduler详解

  • ConcurrentTaskScheduler
    以当前线程执行任务。如果任务简单,可以直接使用这个类来执行。快捷方便。
    PS:这是单线程运行

    public class LocTest implements Runnable {
      private ConcurrentTaskScheduler tpts = new ConcurrentTaskScheduler();
      private void start() {
    tpts.schedule(this, new Date());
      }
      public void run() {
    Thread ct = Thread.currentThread();
    System.out.println("current id:"+ct.getId());
    System.out.println("current name:"+ct.getName());
      }
      public static void main(String[] args) {
    new LocTest().start();
      }
    }
  • DefaultManagedTaskScheduler
    以当前线程执行任务,这是ConcurrentTaskScheduler的子类,添加了JNDI的支持。和ConcurrentTaskScheduler一样的用法,需要使用JNDI可以单独设置
  • ThreadPoolTaskScheduler
    TaskScheduler接口的默认实现类,多线程定时任务执行。可以设置执行线程池数(默认一个线程)。
    PS:
    • 使用前必须得先调用initialize()【初始化方法】
    • 有shutDown()方法,执行完后可以关闭线程

      public class LocTest implements Runnable {
      private ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
      private void start() {
      taskScheduler.setPoolSize(10);
      //必须得先初始化,才能使用
      taskScheduler.initialize();
      taskScheduler.schedule(this, new Date());
      }
      public void run() {
      Thread ct = Thread.currentThread();
      System.out.println("current id:"+ct.getId());
      System.out.println("current name:"+ct.getName());
      }
      public static void main(String[] args) {
      new LocTest().start();
      }
      }
  • TimerManagerTaskScheduler
    这个没有使用到,就没具体了解,有时间再补充。有了解的欢迎来补充。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23623.html

(0)
上一篇 2023-09-04 17:45
下一篇 2023-09-10 10:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信