Quartz是一个定时任务调度的框架,在预定的时间到达时,执行某一任务

可认为是JDK的Timer类的扩展

Quartz的核心接口
Scheduler – 核心调度器
Job – 任务
JobDetail – 任务描述
Trigger  -- 触发器
    SimpleTrigger只执行一次或在给定时间触发并重复N次
    CronTriggers:像日历那样按日程来触发任务, 使用cron表达式

代码示例

public class MyJob implements Job {

    @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello world");
}
}
public class QuartzExample {

    public void run() throws Exception {
// 调度器
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); // 获取当前时间的下一分钟
Date runTime = evenMinuteDate(new Date()); // 定义job
// 在quartz中,有组的概念,withIdentity(名称, 组)
JobDetail job = newJob(MyJob.class).withIdentity("job1", "group1").build(); // 定义触发器,每2秒执行一次
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0 0/1 * * * ?")).build();
// 定义触发器,在下一分钟启动
// Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build(); // 将job注册到调度器
sched.scheduleJob(job, trigger);
// 启动调度器
sched.start(); // 模拟handling
Thread.sleep(60L * 1000L); // 关闭调度器
sched.shutdown(true);
} public static void main(String[] args) throws Exception {
QuartzExample example = new QuartzExample();
example.run();
}
}

进一步的用法是与Spring整合

public class MyJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("myJob 执行了............." + context.getTrigger().getKey().getName());
// get("applicationContext")参数是spring配置中applicationContextJobDataKey属性的值, 作为jobmap的key. 这条语句拿到spring容器
ApplicationContext applicationContext = (ApplicationContext) context.getJobDetail().getJobDataMap().get("applicationContext");
System.out.println("获取到的Spring容器是: " + applicationContext);
}
}
// 实例化spring容器
public class Main {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("classpath:applicationContext-scheduler.xml");
} }

spring配置文件

<!-- 定义jobDetail -->
<bean id ="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 指定具体的job类 -->
<property name ="jobClass" value="com.zx.quartz.MyJob" />
<!-- 指定job的名称 -->
<property name="name" value="myJob" />
<!-- 指定job的分组 -->
<property name="group" value="jobs" />
<!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中删除该任务 -->
<property name="durability" value="true"/>
<!-- 指定spring容器的key,如果不设定那么在job类中是获取不到spring容器里的对象的 -->
<property name="applicationContextJobDataKey" value="applicationContext"/>
</bean> <!-- 另一种方式, 定义job和jobDetial, Job类为普通类即可
<!-- 配置job --
<bean id="myJob" class="com.zx.quartz.MyJob"/>
<!-- 配置jobDetail --
<bean id="myJobDetial" class="org.springframework.scheduling.quartz.MethodlnvokingJobDetaiLFactoryBean">
<property name="targetObject">
<ref bean="myJob" />
</property>
<property name="targetMethod"> <!-- 要执行的方法名 --
<value>execute</value>
</property>
</bean>
--> <!-- 定义触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myJobDetail" />
<!-- 每五秒执行一次 -->
<property name="cronExpression" value="0/5 * * * * ?" />
</bean> <!-- 定义触发器, 一个job可以有多个trigger, 但一个trigger只能有一个job -->
<bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myJobDetail" />
<!-- 每一分钟执行一次 -->
<property name="cronExpression" value="0 */1 * * * ?" />
</bean> <!-- 定义调度器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
<ref bean="cronTrigger2" />
</list>
</property>
</bean>

最新文章

  1. 阿里云学生优惠Windows Server 2012 R2安装IIS,ftp等组件,绑定服务器域名,域名解析到服务器,域名备案,以及安装期间错误的解决方案
  2. 我的第一个WP8.1应用总结
  3. 如何创建C# Closure ?
  4. join用法
  5. Auty自动化测试框架第七篇——添加动作库和常量文件库
  6. ajax实现文件下载
  7. hdu 5773 The All-purpose Zero 最长上升子序列+树状数组
  8. 转: CSS中float和clear的理解
  9. Android(java)学习笔记118:类继承的注意事项
  10. 修改SharePoint平台登录者显示名称
  11. 前端入门16-JavaScript进阶之EC和VO
  12. docker容器的时间同步
  13. 十分钟了解ZAB(Zookeeper Atomic Broadcast)协议
  14. ImportError: No module named google.protobuf.internal
  15. Node.js 安装与管理
  16. [UE4]Native Widget Host
  17. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解
  18. Spring Boot Controller相应JSP页面 错误whitelabel error page
  19. C++ - 类的虚函数\虚继承所占的空间
  20. BAT面试必备——Java 集合类

热门文章

  1. java 遍历map的方法
  2. 前端 CSS 边框
  3. IOS JAVA PHP 安卓 通用加密方式
  4. HadoopHA简述
  5. Hadoop的分布式架构改进与应用
  6. go——接口(二)
  7. java 获取request参数集
  8. 94. Binary Tree Inorder Traversal(二叉树中序遍历)
  9. HBase在数据统计应用中的使用心得
  10. jQuery图片放大预览