Spring 3 调度器示例 —— JDK 定时器和 Quartz 展示
|
Spring框架提供了执行和调度任务的抽象,支持线程池或者在应用服务器环境中代理给CommonJ. Spring也集成了支持使用JDK 在这篇教程中,我们将向你展示在Spring中如何实现一个JDK Timer的例子,然后我们将使用Quartz Scheduler来丰富这个例子. 我们首选的开发环境是Eclipse. 我们使用的Eclipse版本是Eclipse Juno (4.2)同时集成了版本为 3.1.0的Maven插件. 让我们开始吧. |
雅典娜拉
0人顶 顶 翻译的不错哦! |
1. 创建一个新的maven项目Go to File -> Project ->Maven -> Maven Project.
在 “Select project name and location”向导页, 选择 “Create a simple project (skip archetype selection)”这个选项, 其他默认,点击“Next”.
在 “Enter an artifact id” 这个页面, 你可以定义你的项目名称和主包. 我们将设置 “Group Id” 的值为"com.javacodegeeks.snippets.enterprise"以及 “Artifact Id” 的值为"springexample". 这亮相是项目的所在包"com.javacodegeeks.snippets.enterprise.springexample"和项目名称"springexample".点击 “Finish”退出向导,会自动简历项目.
Maven 项目结构:
It consists of the following folders:
|
你要爪子
0人顶 顶 翻译的不错哦! |
2. 添加Spring 3.2.3依赖
或者,你也可以直接在Maven的pom.xml文件中添加Spring依赖,即直接在POM编辑器的“Pom.xml”页上进行编辑,如下所示:
正如你所见,Maven通过声明的方式来管理包依赖。一个本地库会被创建(默认在{user_home}/.m2 目录中),所有需要的类库会从共有库中下载下来放置到本地库中。进而在其内部 – 库依赖关系会被自动的处理和控制。 |
lwei
0人顶 顶 翻译的不错哦! |
3.添加 Quartz 依赖在项目的pom.xml文件中添加 Quartz 依赖,下面是添加后的pom.xml文件内容
4. 在Spring 中使用JDK 自带的定时任务4.1 创建一个简单的任务下面的MyTask.java 是个简单的可以执行的任务 MyTask.java
|
lestchun
0人顶 顶 翻译的不错哦! |
4.2 在applicationContext.xml中配置Scheduler和TimerSpring 使用自己实现的Task取代了JDK中的TimerTask,Spring的Task是可以被定时调用或者通过Timer来重复调用的,它就是org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean。它也提供了对于JDK Timer的一个实现,它是一个后台线程用来调度任务的工具类,这个类就是org.springframework.scheduling.timer.ScheduledTimerTask。 需要执行计划任务的时候,我们需要做的就是在applicationContext.xml文件中定义上面所有提到过的类. 我们在myTask bean中指定MyTask.java类. 我们也需要定义schedulerBean, 它引用TimerTask类. 它有两个属性需要配置. targetObject的值引用我们自己实现的任务bean,也就是myTask. targetMethod属性的值是需要被计划执行的任务方法. |
雅典娜拉
0人顶 顶 翻译的不错哦! |
|
timerTask这个bean是个Timer类型的bean。它有一个timerTask属性,我们可以通过它设置对上面定义好的名为timerTask的bean的引用。这里我们可以使用delay参数来配置第一次开始任务前的延时时间,单位是毫秒。我们也可以使用period参数来设置重复执行任务之间的间隔,单位也是毫秒。我们把它配置成每5秒钟执行一次,首次延时1秒钟。 TimerFactoryBean也定义在applicationContext.xml中。我们可以使用FactoryBean创建的Timer通过scheduledTimerTask参数,来注册一系列ScheduledTimerTask对象。这里,我们注册了定义好的timerTask。 applicationContext.xml
|
lwei
0人顶 顶 翻译的不错哦! |
5 Quartz调度器5.1 Quartz调度器任务为了使用Quartz调度器来丰富我们的例子,首先我们必须设置一个Quartzs调度器任务。可以用两种方式实现这一工作。第一种方式是在applicationContext.xml中把调度任务定义成Spring的一个bean。这个bean可以是一个org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean类,有两个配置参数targetObject和targetMethod,就像我们在上一步中所做的一样。不过,让我们来尝试一个更加复杂的调度器吧。我们仅需创建一个类来继承org.springframework.scheduling.quartz.QuartzJobBean,就可以实现我们自己的两个调度器。MyTask.java可以通过一个setter方法传递给调度器。随后,任务里的方法会在继承自QuartzJobBean的调度任务的executeInternal(JobExecutionContext QuartzJob.java
|
lwei
0人顶 顶 翻译的不错哦! |
5.2 Quartz触发器现在我们必须要来定义运行调度任务的Quartz触发器了。Quartz提供了两个类来实现触发器部分。在org.springframework.scheduling.quartz.SimpleTriggerBean中我们可以设置startTime,endTime和intervals来运行任务,而在org.springframework.scheduling.quartz.CronTriggerBean则支持UNIX的cron表达式来指定任务运行的时间。两种触发器类型都被定义成Spring的bean,而且两者都提供了一个jobDetail参数来设置对调度任务的引用。 还有一个配置工作是创建一个SchedulerFactoryBean,它可以整合调度任务和触发器。所以两个bean都被包含在SchedulerFactoryBean的定义中。 在applicationContext.xml中我们定义了所有的的bean,包括调度任务、触发器和SchedulerFactoryBean。 applicationContext.xml
|
lwei
0人顶 顶 翻译的不错哦! |
|
注意,我们添加的两个触发器的实现,在SchedulerFactoryBean中只使用了其中一个。cronTrigger是org.springframework.scheduling.quartz.CronTriggerBean类型的实现,而simpleTrigger是org.springframework.scheduling.quartz.SimpleTriggerBean类型的实现。在SchedulerFactoryBean类型的bean的triggers参数中设置了对cronTrigger的引用,而在jobDetails参数中设置了对调度任务的引用。 需要注意的另外一件事是,名为quartzJob的bean的定义。这里通过一个参数把Quartz任务类设定为org.springframework.scheduling.quartz.JobDetailBean类。该类有一个jobDataAsMap参数,任务会在这里进行注册。 |
lwei
0人顶 顶 翻译的不错哦! |
6. 运行应用在App.java类里,我们装载了applicationContext.xml文件并使运行应用程序的线程休眠30秒后再关闭上下文。一旦上下文被打开,任务就会像上面安排的那样开始运行。sayHello()方法每5秒钟被调用一次,两个案例都是。 App.java
这是关于Spring 3 Scheduler的两个实现JDK Timer和Quartz的一个例子。 可以下载该教程的Eclipse项目 : SpringSchedulerQuartzExample.zip |
Spring 3 调度器示例 —— JDK 定时器和 Quartz 展示的更多相关文章
- Spring Boot 调度器
Spring Boot 可以很简单的添加一个调度任务 首先需要添加maven依赖 <dependency> <groupId>org.springframework</g ...
- [Spring]支持注解的Spring调度器
概述 如果想在Spring中使用任务调度功能,除了集成调度框架Quartz这种方式,也可以使用Spring自己的调度任务框架. 使用Spring的调度框架,优点是:支持注解(@Scheduler),可 ...
- Spring中Quartz调度器的使用
一.Quartz的特点 * 按作业类的继承方式来分,主要有以下两种: 1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 2. ...
- cocos2d-x调度器原理
程序运行后每达到一帧的时间间隔就会执行一次mainLoop void CCDisplayLinkDirector::mainLoop(void) { //判断是否需要释放CCDirector,通常游戏 ...
- Go调度器介绍和容易忽视的问题
本文记录了本人对Golang调度器的理解和跟踪调度器的方法,特别是一个容易忽略的goroutine执行顺序问题,看了很多篇Golang调度器的文章都没提到这个点,分享出来一起学习,欢迎交流指正. 什么 ...
- python3 爬虫五大模块之一:爬虫调度器
Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...
- 在Spring中使用JDK定时器实现调度任务
在Spring中使用JDK定时器实现调度任务 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 本文探讨Spring如何集成JDK的Timer定时器,实现 ...
- Erlang 进程被抢占的条件——一个进程长时霸占调度器的极端示例
最近研究 binary 的实现和各种操作对应的 beam 虚拟机汇编指令,发现有一些指令序列是不可重入的,比如说有的指令构造一个上下文(也就是某种全局状态),然后下一条指令会对这个上下文做操作(具体的 ...
- java定时任务以及Spring使用Quartz调度器执行定时任务
java下的java.util.Timer中类可以实现定时执行任务的执行: 如:让任务立即执行,每隔1s循环执行一次 public class TimerClass { public static v ...
随机推荐
- UIView 中bounds和frame的差别
搞iOS开发的童鞋基本都会用过UIView,那他的bounds和frame两个属性也不会陌生,那这两个有什么实质性的区别呢? 先看到下面的代码你肯定就明白了一些: -(CGRect)frame{ ...
- TRIZ系列-创新原理-21-高速通过原理
高速通过原理,有的书也译为"降低有害作用的时间"原理,我比較倾向于叫高速通过原理,这个概念下,适用范围比較大些.高速通过原理的详细描写叙述例如以下:1)很高速的实施有害的或者有危急 ...
- c/c++中宏定义##连接符 和#符的使用
C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结.关于#和##在C语言的宏中,#的功能是将其后面的宏 ...
- (转)ios跳转到通用页面
在代码中调用如下代码: [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"prefs:root=LOCATION ...
- NSFileManager的应用
单例,是在 一个文件中只创建一次就能够全部一起共享,多创建的地址是相同的 NSFileManager *manager=[NSFileManager defaultManager]; 是一个单例 ...
- USB数据流模型
USB数据流模型 <<USB Specification11>> << USB Specification20>> << Linux Dev ...
- JavaSE_ API常用对象 总目录(11~14)
JavaSE学习总结第11天_开发工具 & API常用对象111.01 常见开发工具介绍11.02 Eclipse和MyEclipse的概述11.03 Eclipse的下载安装及卸载11.04 ...
- sqlserver 在将 nvarchar 值 'XXX' 转换成数据类型 int 时失败
最近做oracle和sqlserver数据库兼容,感觉sqlserver真心没oracle好用,存储过程竟然只能返回int类型,疯了 疯了 存储过程的output及return的区别 sql取整 ce ...
- Correlation rule tuning
Lots of organizations are deploying SIEM systems either to do their due diligence or because it’s pa ...
- Nexus 5完全拆解
Nexus 5,由LG制造,配备高通骁龙四核处理器,4.95英寸1080P显示屏,支持4G LTE,运行最新的Android 4.4 KitKat原生操作系统.国外著名拆解网站iFixit第一时间带来 ...



