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

被执行的类要实现Runnable接口

TaskScheduler接口

TaskScheduler是一个接口

TaskScheduler接口下定义了6个方法

  • 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时间,下个周期开始执行

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

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

spring 定时任务 taskScheduler详解的更多相关文章

  1. (转)Spring JdbcTemplate 方法详解

    Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...

  2. Spring jar包详解

    Spring jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spri ...

  3. Spring——jar包详解(转)

    Spring——jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spr ...

  4. Spring Boot异常处理详解

    在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...

  5. spring事务配置详解

    一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...

  6. spring注入参数详解

    spring注入参数详解 在Spring配置文件中, 用户不但可以将String, int等字面值注入到Bean中, 还可以将集合, Map等类型的数据注入到Bean中, 此外还可以注入配置文件中定义 ...

  7. Spring的lazy-init详解

    1.Spring中lazy-init详解ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化(也就是依赖注入).提前实例化意味着作为初始 ...

  8. Spring Security Filter详解

    Spring Security Filter详解 汇总 Filter 作用 DelegatingFilterProxy Spring Security基于这个Filter建立拦截机制 Abstract ...

  9. Spring Boot 配置文件详解

    Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...

随机推荐

  1. Eclipse 的 git 插件操作 "代码提交"以及"代码冲突"

    面向对象:曾经使用过SVN的同学. (因为Git 它 可以说是双重的SVN (本地一个服务器,远程一个服务器)),提交代码要有两次步骤,先提交到本地服务器,再把本地服务器在提交到远程服务器. 所以连S ...

  2. iOS 之UICollectionView 之原理介绍

    0. 简介 参考:支持重排的iOS9 UICollectionView 参考:http://www.cnblogs.com/langtianya/p/3902801.html 参考:http://ww ...

  3. PHP大小写问题

    PHP对于系统函数.用户自定义函数.类名称等是不区分大小写的如可以用EHCO也可以用echo调用显示函数, 但对于变量名称又是区分大小写的,如$Name和$NAME是2个不同的变量. 而对于文件名又因 ...

  4. PowerShell学习小结

    1. 获取所有别名信息Get-Alias 2. 获取指定别名信息Get-Alias xx 3. 通过command name获得指定别名信息Get-Alias -Definition xx-xxx 4 ...

  5. lower_bound和upper_bound算法实现

    lower_bound算法要求在已经按照非递减顺序排序的数组中找到第一个大于等于给定值key的那个数,其基本实现原理是二分查找,如下所示: int lower_bound(vector<int& ...

  6. 7.广播和多播,IGMP协议

    1.单播,多播,广播的介绍 1.1.单播(unicast) 单播是说,对特定的主机进行数据传送.例如给某一个主机发送IP数据包.这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说 ...

  7. imageX及其安装windows

    /capture    将卷映像捕获到新 WIM 文件中(备份成wim) imagex /capture g:  e:\7setted.wim "Drive G" /apply   ...

  8. Html 和 Css 的杂乱总结

    1. input 中可以设置 maxLength 属性,控制输入的文字数量,中英文字节数一样,但是没有验证兼容性 2.客户端中的页面禁止右键,复制等 <body scroll="no& ...

  9. Selenium2(java)selenium常用API 五

    上传文件   元素标签是input时上传方式 上传是一个input,对于这种元素是input 的标签可以采用元素的sendKeys()方法来直接赋值,upload.html代码: <html&g ...

  10. apache 添加 ssl_module

    下载httpd2.2.6,以前用http2.2.4会出问题(出现个什么lib的错误) ./configure --prefix=/usr/local/apache --enable-ssl --ena ...