有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。

  1.Java Timer定时

  首先继承java.util.TimerTask类实现run方法

import java.util.TimerTask;     public class EmailReportTask extends TimerTask{         @Override         public void run() {             ...         }       }  

  在Spring定义

  ...

  配置Spring定时器

<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">     <property name="timerTask" ref="reportTimerTask" />     <property name="period">     <value>86400000value>     property>     bean>

  timerTask属性告诉ScheduledTimerTask运行哪个。86400000代表24个小时

  启动Spring定时器

  Spring的TimerFactoryBean负责启动定时任务

<bean class="org.springframework.scheduling.timer.TimerFactoryBean">     <property name="scheduledTimerTasks">        <list><ref bean="scheduleReportTask"/>list>     property>     bean>     scheduledTimerTasks里显示一个需要启动的定时器任务的列表。     可以通过设置delay属性延迟启动     <bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">     <property name="timerTask" ref="reportTimerTask" />     <property name="period">     <value>86400000value>     property>     <property name="delay">     <value>3600000value>     property>     bean>

  这个任务我们只能规定每隔24小时运行一次,无法精确到某时启动

  2.Quartz定时器

  首先继承QuartzJobBean类实现executeInternal方法

import org.quartz.JobExecutionContext;     import org.quartz.JobExecutionException;     import org.springframework.scheduling.quartz.QuartzJobBean;       public class EmailReportJob extends QuartzJobBean{     protected void executeInternal(JobExecutionContext arg0)     throws JobExecutionException {     ...     }     } 

  在Spring中定义

<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">     <property name="jobClass">     <value>EmailReportJobvalue>     property>     <property name="jobDataAsMap">         <map>             <entry key="courseService">                 <ref bean="courseService"/>                 entry>         map>     property>     bean> 

  在这里我们并没有直接声明一个EmailReportJob Bean,而是声明了一个JobDetailBean。这个是Quartz的特点。JobDetailBean是Quartz的org.quartz.JobDetail的子类,它要求通过jobClass属性来设置一个Job对象。

  使用Quartz的JobDetail中的另一个特别之处是EmailReportJob的courseService属性是间接设置的。JobDetail的jobDataAsMap属性接受一个Map,包括设置给jobClass的各种属性,当。JobDetailBean实例化时,它会将courseService Bean注入到EmailReportJob 的courseService 属性中。

  启动定时器

  Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。Spring提供了两个触发器SimpleTriggerBean和CronTriggerBean。

  SimpleTriggerBean与scheduledTimerTasks类似。指定工作的执行频度,模仿scheduledTimerTasks配置 .

<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">     <property name="jobDetail" ref="reprotJob" />     <property name="startDelay">     <value>360000value>     property>     <property name="repeatInterval">         <value>86400000value>     property>     bean>  

  startDelay也是延迟1个小时启动

  CronTriggerBean指定工作的准确运行时间

<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">     <property name="jobDetail" ref="reprotJob" />     <property name="cronExpression">     <value>0 0 6 * * ?value>     property>     bean>

  属性cronExpression告诉何时触发。最神秘就是cron表达式:

  Linux系统的计划任务通常有cron来承担。一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。从左到右:

  1.秒2.分3.小时4.月份中的日期(1-31)5.月份(1-12或JAN-DEC)6.星期中的日期(1-7或SUN-SAT)7.年份(1970-2099)

  每个元素都显示的规定一个值(如6),一个区间(9-12),一个列表(9,11,13)或一个通配符(*)。因为4和6这两个元素是互斥的,因此应该通过设置一个问号(?)来表明不想设置的那个字段,“/”如果值组合就表示重复次数(10/6表示每10秒重复6次)。

  启动定时器

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">         <property name="triggers">            <list><ref bean="cronReportTrigger"/>list>         property>     bean>

  triggers属性接受一组触发器。

Spring定时器的两种实现方式的更多相关文章

  1. (一)spring aop的两种配置方式。

    sring aop的方式有两种:(1)xml文件配置方式(2)注解的方式实现,我们可以先通过一个demo认识spring aop的实现,然后再对其进行详细的解释. 一.基于注解的springAop配置 ...

  2. spring AOP的两种配置方式

    连接点(JoinPoint) ,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的前.后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点.其他 ...

  3. Spring与Hibernate两种组合方式

    第一种 1.hibernate.cfg.xml文件 xml version='1.0' encoding='utf-8'?> "-//Hibernate/Hibernate Confi ...

  4. Spring常见的两种增强方式

    一.编程式增强 不借助spring的配置,通过自己实例化对象来实现的增强方式 创建增强类,需要实现你需要的增强接口,(只有实现了该接口,这个类就是一个通知)) /** * 增强类 */ public ...

  5. spring ----> aop的两种实现方式

    实现1:基于xml package com.rr.spring3.interf; //接口 public interface SayHello { public void sayHello(); } ...

  6. 实例化Spring容器的两种常用方式

    //在类路径下寻找配置文件来实例化容器 ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"b ...

  7. struts2+spring的两种整合方式

    也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...

  8. Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对 ...

  9. Spring 注入的两种方式

    Spring 的两种注入方式: 1. 属性注入:通过无参构造函数+setter方法注入 2. 构造注入:通过有参的构造函数注入. 优缺点: 1. 属性注入直白易懂,缺点是对于属性可选的时候,很多个构造 ...

随机推荐

  1. 【Java】自动类型转换规则

    自动类型转换遵循下面的规则: 若参与运算的数据类型不同,则先转换成同一类型,然后进行运算. 转换按数据长度增加的方向进行,以保证精度不降低.例如int型和long型运算时,先把int量转成long型后 ...

  2. maven 使用记录之修改 maven默认jdk版本

    maven package执行的时候会遇到jdk版本不对的问题 :原因是 maven所指定的jdk版本与项目使用的jdk版本不一致 1.项目属性的 java compiler可以设置 2.直接修改 m ...

  3. 初步理解Python进程的信号通讯

    Reference: http://www.jb51.net/article/63787.htm 信号的概念 信号(signal)--     进程之间通讯的方式,是一种软件中断.一个进程一旦接收到信 ...

  4. div模态显示内容

    业务需要,上传的图片,本地显示大图: 模态代码: <div onclick="hidebigimg()" class = "bg-model" style ...

  5. 【转】如何使用visual studio将你的程序打包成安装包

    原文地址:https://www.cnblogs.com/SolarWings/p/6132310.html 很久很久以前,我一直有一个梦想,那就是做出一个自己的游戏,这个游戏很像模像样,除了拥有一个 ...

  6. git 修改上次提交信息 与 撤销此操作.

    git commit --amend 修改刚才提交的commit信息 撤销 git commit --amend 思路是使用 git reflog 查看在哪里ammend的.找到HEAD{N}, N是 ...

  7. 【Android】Android6.0读取通话记录

    需求:读取通话记录,然后列表显示,每条记录的数据包括姓名.号码.类型(来电.去电.未接,字体颜色分别为绿.蓝.红),然后长按条目弹出一个列表弹窗,显示[复制号码到拨号盘].[发短信].[打电话]. 先 ...

  8. CDH版本java开发环境搭建

    1. maven设置 除了阿里云库,还需要引入 cdh, spring库.需要修改maven下面的配置文件setting.xml, 参考下面设置. <mirror> <!--This ...

  9. .net lock的使用

    内容参考自:http://daimajishu.iteye.com/blog/1079107 一. 基本使用形式 二.应用举例 三.需要注意的地方 四.lock应避免锁定public 类型或不受程序控 ...

  10. FileZilla等软件搭建ftp服务器

    一.常用的几款ftp服务器软件介绍 1.1 Server-U Serv-U是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K/2000/xp等全Windows系列.可以设定多个FT ...