文档章节

根据Quartz API构建jobDetail,无需在配置文件中注入jobDetail

tmac1yan
 tmac1yan
发布于 2016/01/21 14:27
字数 560
阅读 74
收藏 1

配置任务调度器 (对应的文件名为quartz-task.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="" xmlns:xsi=""
 xsi:schemaLocation=" "
 default-lazy-init="false">
 <!-- 调度器 -->
    <bean name="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
       <!-- 通过applicationContextSchedulerContextKey属性配置spring上下文 -->    
        <property name="applicationContextSchedulerContextKey">    
            <value>applicationContext</value>    
        </property>   
    </bean>  
    <!--加载可执行的任务-->
    <bean id="loadTask" class="com.quartz.LoadTask" init-method="initTask" />
 
</beans>

加载可执行任务的类LoadTask.java

public class LoadTask {
 public void initTask() throws Exception {
  Scheduler scheduler = schedulerFactoryBean.getScheduler();
  // 可执行的任务列表,Task是自定义的要执行的任务 
  Collection<Task> taskList = taskService.findTask();
  for (Task task : taskList) {
   // 任务名称和任务组设置规则:
   // 名称:task_1 ..
   // 组 :group_1 ..
   TriggerKey triggerKey = TriggerKey.triggerKey(
     "task_" + task.getId(), "group_" + task.getId());
   CronTrigger trigger = (CronTrigger) scheduler
     .getTrigger(triggerKey);
   // 不存在,创建一个
   if (null == trigger) {
    JobDetail jobDetail = JobBuilder
      .newJob(QuartzJobFactory.class)
      .withIdentity("task_" + task.getId(),
        "group_" + task.getId()).build();
    jobDetail.getJobDataMap().put("scheduleJob", task);
    // 表达式调度构建器
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
      .cronSchedule(getCronExpression());
    // 按新的表达式构建一个新的trigger
    trigger = TriggerBuilder
      .newTrigger()
      .withIdentity("task_" + task.getId(),
        "group_" + task.getId())
      .withSchedule(scheduleBuilder).build();
    scheduler.scheduleJob(jobDetail, trigger);
   } else {
    // trigger已存在,则更新相应的定时设置
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
      .cronSchedule(taskService.getCronExpression());
    // 按新的cronExpression表达式重新构建trigger
    trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
      .withSchedule(scheduleBuilder).build();
    // 按新的trigger重新设置job执行
    scheduler.rescheduleJob(triggerKey, trigger);
   }
  }
 }
 @Autowired
 private SchedulerFactoryBean schedulerFactoryBean;
 @Autowired
 private  TaskService taskService;
}
//一个scheduler可以对应一个trigger也可以对应多个trigger 
//对应多个trigger时会产生并发

调度任务的入口

@DisallowConcurrentExecution //不支持并发,即此job是StatefulJob而不是普通job 
public class QuartzTaskFactory implements Job {
  
 @Override
 public void execute(JobExecutionContext context)
   throws JobExecutionException {
  // TODO Auto-generated method stub
  try {
   System.out.println("任务运行...");
   Task task = (Task) context.getMergedJobDataMap().get(
     "scheduleJob");
   System.out.println("任务名称: [" + task.getTaskName() + "]");
   //在这里执行你的任务...
   } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

暂停任务

Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.pauseJob(jobKey);

恢复任务

Scheduler scheduler = schedulerFactoryBean.getScheduler();
 
 
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.resumeJob(jobKey);

删除任务

 
 
Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.deleteJob(jobKey);

立即运行任务

Scheduler scheduler = schedulerFactoryBean.getScheduler();
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.triggerJob(jobKey);

更新任务(时间表达式)

Scheduler scheduler = schedulerFactoryBean.getScheduler();
  
TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(),
scheduleJob.getJobGroup());
  
//获取trigger,即在spring配置文件中定义的 bean id="myTrigger"
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
  
//表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob
.getCronExpression());
  
//按新的cronExpression表达式重新构建trigger
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
.withSchedule(scheduleBuilder).build();
  
//按新的trigger重新设置job执行
scheduler.rescheduleJob(triggerKey, trigger);

本文转载自:http://www.dexcoder.com/selfly/article/308

tmac1yan
粉丝 1
博文 10
码字总数 2534
作品 0
西城
程序员
私信 提问
Quartz的原理

Quartz API :http://www.quartz-scheduler.org/api/2.2.0/ http://www.boyunjian.com/javadoc/org.apache.servicemix.bundles/org.apache.servicemix.bundles.quartz/2.2.11/_/ 主要包含了以......

Sam_鸿发
2016/01/20
28
1
Spring Quartz的原理

Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。 一、核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。 1、Job 表示一...

laigous
2014/05/05
3.3K
1
Quartz2.2.1开发(续)

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean name="quartz......

tmac1yan
2016/01/20
383
0
Quartz集成spring开发大全

一.固定xml调用quartz 准备工作: 1.导入quartz-1.x.x.x.jar到lib,可能还需要lib/sh4j-api-1.x.x.jar,log4g,sh4j.api,1,x,x,jar,sh4j.nop,1,x,x,jar 2.在src目录下创建quartz.properties......

长平狐
2013/01/06
2.1K
1
OA现金盘源码搭建与Quartz简单使用

一. 什么是Quartz? 简介: 定时任务调度的框架, 可以在框架中放入很多个应用程序(重点关注的是应用程序的编写) OA现金盘源码搭建QQ:2152876294 网址diguaym.com 使用场景: 闹钟 账单提醒 核心...

cbjsih
2018/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部