2011-09-05 
在spring中对任务调度的集成除了使用JDK自带的Timer和TimerTask类来实现简单任务调度以外,也可以使用企业级的开源作业调度框架Quartz来实现,下面是一个小例子:
1. 首先是一个任务类,这个类没有实现任何接口,其中包含一个run方法用来运行这个task,代码如下:
[java] view plaincopyprint?
package org.garbagecan.springstudy.schedule.quartz;  
public class MyTask {  
private String name;  
public void run() {  
System.out.println("Run task: " + name + ".");  
}  
public String getName() {  
return name;  
}  
public void setName(String name) {  
this.name = name;  
}  
}  
2. 一个Job类,这个类需要继承spring的QuartzJobBean类,来说明当前类是一个Quartz的Job类,类包含了一个Task类的对象实例,在每次Job被调度的时候,将会运行其中的executeInternal方法,代码如下:
[java] view plaincopyprint?
package org.garbagecan.springstudy.schedule.quartz;  
import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
import org.springframework.scheduling.quartz.QuartzJobBean;  
public class MyJob extends QuartzJobBean {  
private MyTask myTask;  
protected void executeInternal(JobExecutionContext context)  
throws JobExecutionException {  
myTask.run();  
}  
public MyTask getMyTask() {  
return myTask;  
}  
public void setMyTask(MyTask myTask) {  
this.myTask = myTask;  
}  
}  
3. Spring配置文件,内容如下
[html] view plaincopyprint?
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"  
default-lazy-init="true">  
<bean id="timerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">  
<property name="triggers">  
<list>  
<ref local="simpleTrigger"/>  
</list>  
</property>  
</bean>  
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
<property name="jobDetail" ref="myJob" />  
<property name="startDelay" value="0" />  
<property name="repeatInterval" value="10000" />  
</bean>  
<bean id="myJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
<property name="name" value="myJob"/>  
<property name="group" value="myGroup"/>  
<property name="description" value="myJob"/>  
<property name="jobClass" value="org.garbagecan.springstudy.schedule.quartz.MyJob"/>  
<property name="jobDataAsMap">  
<map>  
<entry key="myTask" value-ref="myTask" />  
</map>  
</property>  
</bean>  
<bean id="myTask" class="org.garbagecan.springstudy.schedule.quartz.MyTask">  
<property name="name" value="my task"/>  
</bean>  
</beans>  
3.1 首先,需要定义了一个Task类,具体的任务逻辑可以写在这个类里;
3.2 定义一个JobDetailBean类的bean,这个是为了适应Quartz的JobDetail,其中可以定义name,group,description等信息,这些信息主要是为了和别的作业做区分使用;其中还有一个jobClass属性,定义了使用的是那个Job类实例,这里使用第二步创建的MyJob类;最后定义了一个叫jobDataAsMap的属性,这个属性是Quartz提供的用来传递参数使用的一个Map集合,这些集合里的类会被spring自动注入到目标Job类中;
3.3 创建一个触发器类,这里使用的是Quartz提供的Simple Trigger,在Spring里,使用的是SimpleTriggerBean来做映射,主要是定义了第一次运行的延时时间,每次重复执行之间的间隔,当然还有最主要的具体的Job类实例;
3.4 最后定义了一个SchedulerFactoryBean的bean,其中定义了具体要调度那些触发器;
4. 最后,写一个测试类来测试上面的代码和配置
[java] view plaincopyprint?
package org.garbagecan.springstudy.schedule.quartz;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
public class Test {  
public static void main(String[] args) throws Exception {  
new ClassPathXmlApplicationContext("/org/garbagecan/springstudy/schedule/quartz/spring.xml");  
}  
}  
运行Test类,可以看到一个叫my task的job会启动,并且每隔10秒运行一次。

Spring任务调度实战之Quartz Simple Trigger相关推荐

  1. Spring + Quartz任务调度实战之动态作业调度

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文地址 ...

  2. Spring任务调度

    任务调度是大多数应用系统的常见需求之一,拿论坛来说:每个半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行对锁定过期的用户进行解锁.以上都是以时间为关注点的调度,事实上 ...

  3. SpringBoot系列:Spring Boot集成定时任务Quartz,java百度云短信发送

    然后创建QuartzConfig,接着定义JobDetail,JobDetail由JobBuilder构建,同时关联了任务QuartzJob1. @Configuration public class ...

  4. Spring Boot实战:过滤器、拦截器与切片

    Spring Boot实战:过滤器.拦截器与切片 Q:使用过滤器.拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系 过滤器Filter 过滤器概念 Filter是J2E中来的,可以看做是Se ...

  5. Spring任务调度之Spring-Task

    目录 1.什么是任务调度 2.基于注解的定时任务 3.基于xml的定时任务 4.cron表达式 1.什么是任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件 ...

  6. Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库

    前言 最近在做阅读类的业务,需要记录用户的PV,UV: 项目状况:前期尝试业务阶段: 特点: 快速实现(不需要做太重,满足初期推广运营即可) 快速投入市场去运营 收集用户的原始数据,三要素: 谁 在什 ...

  7. Spring Boot实战之基于WebSocket协议构建交互式Web应用

    本文阅读时间大约8分钟. 1. WebSocket简介 WebSocekt协议诞生于2008年,在2011年成为国际标准,目前所有的浏览器都已经支持WebSocket协议了.WebSocket协议属于 ...

  8. Spring任务调度-TaskScheduler

    任务调度接口:TaskScheduler 除了TaskExecutor抽象之外,Spring 3.0还引用了任务调度接口 TaskScheduler,它提供了多种方法来调度将来某个时间点要运行的任务. ...

  9. spring任务调度(task)

    spring 任务调度总结 参考资料 http://www.ibm.com/developerworks/cn/java/j-quartz/ http://www.opensymphony.com/q ...

  10. Spring Security 实战干货:自定义异常处理

    Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...

最新文章

  1. 腾讯AI Lab发布三大核心战略,与自然科研达成战略合作
  2. Image Cloud Gallery
  3. WIN7系统共享访问方式总结
  4. ASP.NET中新建MVC项目并连接SqlServer数据库实现增删改查
  5. 获取qt保存对话框中输入文本_PyQt5 输入对话框QInputDialog
  6. 探寻AI未来式,百度AI Studio两周年寻最强锦鲤送超大惊喜
  7. CSS中的三种样式来源:创作人员、读者和用户代理
  8. 信息学奥赛一本通(1205:汉诺塔问题)
  9. 卷积神经网络对咖啡病虫害识别和分割(分割+分类,病害严重程度详细)
  10. Comprehensive learning path – Data Science in Python深度学习路径-用python进行数据学习
  11. POJ 1637 混合图欧拉回路
  12. Qt 中利用 GNU barcode 生成一维条形码
  13. c语言程序32位,turbo c语言下载
  14. matlab实训心得,沟通实训心得体会
  15. win7/win10系统防火墙禁止单个应用联网步骤
  16. cyj sql 收藏
  17. 企业内部短信模板大全分析
  18. WPF流程图制作系列相关基础一
  19. 【Java程序设计】Java上机实验(二)
  20. 视觉SLAM十四讲 ch3 (三维空间刚体运动)笔记

热门文章

  1. 【数字图像处理系列一】opencv-python快速入门篇
  2. 维基百科简体中文语料的获取
  3. effective Java chapter 2创建和销毁对象
  4. 【Gym-102606 H】Heat Pipes【奇环染色、bfs 生成树】
  5. 中查询每个班成绩前三_重磅 2020卫生资格中初级考试成绩今天公布了
  6. 215.数组中第的K个最大元素(力扣leetcode) 博主可答疑该问题
  7. 网页报错404:The origin server did not find 的原因(持续更新带图并总结了其他博客的内容)
  8. 高可用Redis(四):列表,集合与有序集合
  9. 【Qt开发】关于QWSServer
  10. WPF Name与x:Name 使用