文档章节

Spring定时器的两种实现方式

黑帽子
 黑帽子
发布于 2013/08/20 09:53
字数 750
阅读 53
收藏 1
点赞 0
评论 0

有两种流行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属性接受一组触发器。

© 著作权归作者所有

共有 人打赏支持
黑帽子
粉丝 16
博文 53
码字总数 25680
作品 0
珠海
高级程序员
Spring学习——Spring MVC 中定时器实现

在一些工作需要使用到定时器,Spring很好的集成了定时器的功能! 在Spring 中使用Quartz,本文介绍Spring3.0以后自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且...

IT达仁 ⋅ 05/10 ⋅ 0

SpringMVC框架使用注解执行定时任务

在项目开发过程中,免不了会有一些定时任务。今天就给大家一个SpringMVC框架中利用注解的方式执行定时任务的示例代码 使用到的JAR文件: 点击下列Jar文件会跳到我的网盘下载 aopalliance-1....

Carl_ ⋅ 2015/07/23 ⋅ 0

第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?

初升级版本,在已经使用的系统内还是存在一些兼容性的问题,有很多变化!!!也存在一些过时的方法、配置文件信息以及类,我们在之前版本的中可以使用抽象类来处理相关的配置,由于版本最低支...

恒宇少年 ⋅ 03/17 ⋅ 0

spring+quartz 定时器使用

项目使用:spring+springMVC+JPA+Maven 1、在pom.xml中引用quartz的jar包 <!-- quartz --><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version......

杀丶破狼 ⋅ 2015/10/13 ⋅ 1

Spring Boot开启的 2 种方式

Spring Boot依赖 使用Spring Boot很简单,先添加基础依赖包,有以下两种方式 1. 继承spring-boot-starter-parent项目 2. 导入spring-boot-dependencies项目依赖 Spring Boot依赖注意点 1. 属...

Java技术栈 ⋅ 06/10 ⋅ 0

Spring Boot 2.0 WebFlux 上手系列课程:快速入门(一)

02:WebFlux 快速入门实践 ## Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从...

泥沙砖瓦浆木匠 ⋅ 04/15 ⋅ 0

从Spring-Session源码看Session机制的实现细节

去年我曾经写过几篇和 Spring Session 相关的文章,从一个未接触过 Spring Session 的初学者视角介绍了 Spring Session 如何上手,如果你未接触过 Spring Session,推荐先阅读下「从零开始学...

徐靖峰 ⋅ 04/20 ⋅ 0

Spring定时器(使用注解)

先需要在springMVC的配置文件中,配置定时器的扫描注解 <!-- 定时器开关 开始--> task:annotation-driven / 定时器的实现代码 package com.test.control.base;import org.springframework.s...

杀丶破狼 ⋅ 2015/06/24 ⋅ 2

1 Spring核心:IoC容器的实现

依赖控制反转的实现有很多种方式。在Spring中,IoC容器是实现这个模式的载体, 它可以在对象生成或初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方...

qq_18150351 ⋅ 04/24 ⋅ 0

Spring编程式和声明式事务

1.编程式事务 1.1 编程式和声明式事务的区别 Spring提供了对编程式事务和声明式事务的支持,编程式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用户将操作与事务...

梨加橙 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 40分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 55分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 56分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部