spring中定时任务taskScheduler的详细介绍

 更新时间:2017年02月13日 11:12:00   作者:孙行者、  
这篇文章主要介绍了spring中定时任务taskScheduler的相关资料,文中通过示例代码介绍的很详细,相信对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。

前言

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

被执行的类要实现Runnable接口

TaskScheduler接口

TaskScheduler是一个接口,TaskScheduler接口下定义了6个方法


1、schedule(Runnable task, Trigger trigger);

指定一个触发器执行定时任务。可以使用CronTrigger来指定Cron表达式,执行定时任务

 CronTrigger t = new CronTrigger("0 0 10,14,16 * * ?");
 taskScheduler.schedule(this, t);

2、schedule(Runnable task, Date startTime);

指定一个具体时间点执行定时任务,可以动态的指定时间,开启任务。只执行一次。(比Timer好用多了。早发现这接口就好了。。。)

3、scheduleAtFixedRate(Runnable task, long period);

立即执行,循环任务,指定一个执行周期(毫秒计时)

PS:不管上一个周期是否执行完,到时间下个周期就开始执行

4、scheduleAtFixedRate(Runnable task, Date startTime, long period);

指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)

PS:不管上一个周期是否执行完,到时间下个周期就开始执行

5、scheduleWithFixedDelay(Runnable task, long delay);

立即执行,循环任务,指定一个间隔周期(毫秒计时)

PS:上一个周期执行完,等待delay时间,下个周期开始执行

6、scheduleWithFixedDelay(Runnable task, Date startTime, long delay);

指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)

PS:上一个周期执行完,等待delay时间,下个周期开始执行

TaskScheduler下有五个实现类


1、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();
 }
}

2、DefaultManagedTaskScheduler

以当前线程执行任务,这是ConcurrentTaskScheduler的子类,添加了JNDI的支持。和ConcurrentTaskScheduler一样的用法,需要使用JNDI可以单独设置

3、ThreadPoolTaskScheduler

TaskScheduler接口的默认实现类,多线程定时任务执行。可以设置执行线程池数(默认一个线程)。

PS:

  1. 使用前必须得先调用initialize() 【初始化方法】
  2. 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();
}
}

4、TimerManagerTaskScheduler

这个没有使用到,就没具体了解,有时间再补充。有了解的欢迎来补充。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • 不调用方法实现hutool导出excel图片示例详解

    不调用方法实现hutool导出excel图片示例详解

    这篇文章主要为大家介绍了不调用方法实现hutool导出excel图片示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 浅谈Java中的重载,重写,多态,静态绑定、动态绑定

    浅谈Java中的重载,重写,多态,静态绑定、动态绑定

    这篇文章主要介绍了浅谈Java中的重载,重写,多态,静态绑定、动态绑定,具有一定借鉴价值
    2018-01-01
  • Spring Boot中如何使用断路器详解

    Spring Boot中如何使用断路器详解

    这篇文章主要给大家介绍了关于Spring Boot中如何使用断路器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Jmeter多种定时器实现方法解析

    Jmeter多种定时器实现方法解析

    这篇文章主要介绍了Jmeter多种定时器实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • ByteArrayOutputStream与InputStream互相转换方式

    ByteArrayOutputStream与InputStream互相转换方式

    这篇文章主要介绍了ByteArrayOutputStream与InputStream互相转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Cache 集成 Caffeine实现项目缓存的示例

    Spring Cache 集成 Caffeine实现项目缓存的示例

    本文主要介绍了Spring Cache 集成 Caffeine实现项目缓存的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • java读取zip/jar包中文件的几种方式

    java读取zip/jar包中文件的几种方式

    这篇文章主要给大家介绍了关于java读取zip/jar包中文件的几种方式,在我们日常使用中压缩文件是非常常用的,文中通过示例代码将java读取zip/jar包中文件的方法介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 图解JVM内存模型

    图解JVM内存模型

    这篇文章主要介绍了JVM内存模型的相关资料,帮助大家更好的理解和学习Java虚拟机,感兴趣的朋友可以了解详细
    2020-10-10
  • Springboot项目接口限流实现方案

    Springboot项目接口限流实现方案

    这篇文章主要介绍了Springboot项目接口限流实现方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 使用JAVA实现邮件发送功能的图文教程

    使用JAVA实现邮件发送功能的图文教程

    邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,下面这篇文章主要给大家介绍了关于使用JAVA实现邮件发送功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06

最新评论