package org.fh.util; import java.util.Map; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; import org.quartz.impl.StdSchedulerFactory; /** * 说明:定时任务管理类 * 作者:FH Admin * from:fhadmin.cn */ public class QuartzManager { private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); //创建一个SchedulerFactory工厂实例 private static String JOB_GROUP_NAME = "FH_JOBGROUP_NAME"; //任务组 private static String TRIGGER_GROUP_NAME = "FH_TRIGGERGROUP_NAME"; //触发器组 /**添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 * @param jobName 任务名 * @param cls 任务 * @param time 时间设置,参考quartz说明文档 */ public static void addJob(String jobName, Class<? extends Job> cls, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); //通过SchedulerFactory构建Scheduler对象 JobDetail jobDetail= JobBuilder.newJob(cls).withIdentity(jobName,JOB_GROUP_NAME).build(); //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例 CronTrigger trigger = (CronTrigger) TriggerBuilder .newTrigger() //创建一个新的TriggerBuilder来规范一个触发器 .withIdentity(jobName, TRIGGER_GROUP_NAME) //给触发器起一个名字和组名 .withSchedule(CronScheduleBuilder.cronSchedule(time)) .build(); sched.scheduleJob(jobDetail, trigger); if (!sched.isShutdown()) { sched.start(); // 启动 } } catch (Exception e) { throw new RuntimeException(e); } } /**添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 (带参数) * @param jobName 任务名 * @param cls 任务 * @param time 时间设置,参考quartz说明文档 */ public static void addJob(String jobName, Class<? extends Job> cls, String time, Map<String,Object> parameter) { try { Scheduler sched = gSchedulerFactory.getScheduler(); //通过SchedulerFactory构建Scheduler对象 JobDetail jobDetail= JobBuilder.newJob(cls).withIdentity(jobName,JOB_GROUP_NAME).build(); //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例 jobDetail.getJobDataMap().put("parameterList", parameter); //传参数 CronTrigger trigger = (CronTrigger) TriggerBuilder .newTrigger() //创建一个新的TriggerBuilder来规范一个触发器 .withIdentity(jobName, TRIGGER_GROUP_NAME) //给触发器起一个名字和组名 .withSchedule(CronScheduleBuilder.cronSchedule(time)) .build(); sched.scheduleJob(jobDetail, trigger); if (!sched.isShutdown()) { sched.start(); // 启动 } } catch (Exception e) { throw new RuntimeException(e); } } /**添加一个定时任务 * @param jobName 任务名 * @param jobGroupName 任务组名 * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param jobClass 任务 * @param time 时间设置,参考quartz说明文档 */ public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, Class<? extends Job> jobClass, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName,jobGroupName).build();// 任务名,任务组,任务执行类 CronTrigger trigger = (CronTrigger) TriggerBuilder // 触发器 .newTrigger() .withIdentity(triggerName, triggerGroupName) .withSchedule(CronScheduleBuilder.cronSchedule(time)) .build(); sched.scheduleJob(jobDetail, trigger); if (!sched.isShutdown()) { sched.start(); // 启动 } } catch (Exception e) { throw new RuntimeException(e); } } /**添加一个定时任务 (带参数) * @param jobName 任务名 * @param jobGroupName 任务组名 * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param jobClass 任务 * @param time 时间设置,参考quartz说明文档 */ public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, Class<? extends Job> jobClass, String time, Map<String,Object> parameter) { try { Scheduler sched = gSchedulerFactory.getScheduler(); JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName,jobGroupName).build();// 任务名,任务组,任务执行类 jobDetail.getJobDataMap().put("parameterList", parameter); //传参数 CronTrigger trigger = (CronTrigger) TriggerBuilder // 触发器 .newTrigger() .withIdentity(triggerName, triggerGroupName) .withSchedule(CronScheduleBuilder.cronSchedule(time)) .build(); sched.scheduleJob(jobDetail, trigger); if (!sched.isShutdown()) { sched.start(); // 启动 } } catch (Exception e) { throw new RuntimeException(e); } } /** 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) * @param jobName 任务名 * @param time 新的时间设置 */ public static void modifyJobTime(String jobName, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); //通过SchedulerFactory构建Scheduler对象 TriggerKey triggerKey = TriggerKey.triggerKey(jobName,TRIGGER_GROUP_NAME); //通过触发器名和组名获取TriggerKey CronTrigger trigger = (CronTrigger)sched.getTrigger(triggerKey); //通过TriggerKey获取CronTrigger if (trigger == null) { return; } String oldTime = trigger.getCronExpression(); if (!oldTime.equalsIgnoreCase(time)) { JobKey jobKey = JobKey.jobKey(jobName, JOB_GROUP_NAME); //通过任务名和组名获取JobKey JobDetail jobDetail = sched.getJobDetail(jobKey); Class<? extends Job> objJobClass = jobDetail.getJobClass(); removeJob(jobName); addJob(jobName, objJobClass, time); } } catch (Exception e) { throw new RuntimeException(e); } } /**修改一个任务的触发时间 * @param triggerName 任务名称 * @param triggerGroupName 传过来的任务名称 * @param time 更新后的时间规则 */ public static void modifyJobTime(String triggerName, String triggerGroupName, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); //通过SchedulerFactory构建Scheduler对象 TriggerKey triggerKey = TriggerKey.triggerKey(triggerName,triggerGroupName); //通过触发器名和组名获取TriggerKey CronTrigger trigger = (CronTrigger)sched.getTrigger(triggerKey); //通过TriggerKey获取CronTrigger if (trigger == null) return; CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(trigger.getCronExpression()); String oldTime = trigger.getCronExpression(); if (!oldTime.equalsIgnoreCase(time)) { trigger = (CronTrigger)trigger.getTriggerBuilder() //重新构建trigger .withIdentity(triggerKey) .withSchedule(scheduleBuilder) .withSchedule(CronScheduleBuilder.cronSchedule(time)) .build(); sched.rescheduleJob(triggerKey, trigger); //按新的trigger重新设置job执行 } } catch (Exception e) { throw new RuntimeException(e); } } /**移除一个任务(使用默认的任务组名,触发器名,触发器组名) * @param jobName 任务名称 */ public static void removeJob(String jobName) { try { Scheduler sched = gSchedulerFactory.getScheduler(); TriggerKey triggerKey = TriggerKey.triggerKey(jobName,TRIGGER_GROUP_NAME); //通过触发器名和组名获取TriggerKey JobKey jobKey = JobKey.jobKey(jobName, JOB_GROUP_NAME); //通过任务名和组名获取JobKey sched.pauseTrigger(triggerKey); // 停止触发器 sched.unscheduleJob(triggerKey);// 移除触发器 sched.deleteJob(jobKey); // 删除任务 } catch (Exception e) { throw new RuntimeException(e); } } /**移除一个任务 * @param jobName 任务名 * @param jobGroupName 任务组名 * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 */ public static void removeJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName) { try { Scheduler sched = gSchedulerFactory.getScheduler(); TriggerKey triggerKey = TriggerKey.triggerKey(triggerName,triggerGroupName); //通过触发器名和组名获取TriggerKey JobKey jobKey = JobKey.jobKey(jobName, jobGroupName); //通过任务名和组名获取JobKey sched.pauseTrigger(triggerKey); // 停止触发器 sched.unscheduleJob(triggerKey);// 移除触发器 sched.deleteJob(jobKey); // 删除任务 } catch (Exception e) { throw new RuntimeException(e); } } /** * 启动所有定时任务 */ public static void startJobs() { try { Scheduler sched = gSchedulerFactory.getScheduler(); sched.start(); } catch (Exception e) { throw new RuntimeException(e); } } /** * 关闭所有定时任务 */ public static void shutdownJobs() { try { Scheduler sched = gSchedulerFactory.getScheduler(); if (!sched.isShutdown()) { sched.shutdown(); } } catch (Exception e) { throw new RuntimeException(e); } } }
相关推荐
Java Quartz 是一个强大的开源任务调度库,用于在Java应用程序中创建和管理定时任务。Quartz 提供了丰富的API,使得开发者能够灵活地定义任务,并精确控制任务的执行时间。本项目利用Quartz 实现了基于Cron表达式的...
Quartz是Java领域中一个广泛使用的开源任务调度框架,它提供了丰富的功能来满足各种定时任务的需求。本篇文章将深入探讨Quartz的基本实现,以及如何在Java项目中运用它。 首先,Quartz的核心概念包括作业(Job)、...
综上所述,这个"Quartz定时任务简单列子"可能涵盖了创建Job类,定义Trigger,以及如何使用Scheduler来启动和管理任务的基本步骤。如果你想要深入学习Quartz,还需要了解更多的高级特性,比如作业存储、触发器策略、...
在这个"java quartz定时任务项目+jar包.zip"中,我们可以期待找到一个完整的Java项目示例,以及可能包含Quartz库的jar文件,帮助我们快速理解和使用Quartz。 Quartz 的核心概念主要包括: 1. **作业(Job)**:作业是...
【SSM+Quartz 定时任务管理Demo详解】 在Java Web开发中,定时任务是一项常见且重要的功能,用于执行一些周期性或者特定时间点的任务,例如数据统计、备份、清理等。本Demo以"基于SSM+quartz的定时任务管理"为主题...
2. **Quartz定时框架** - Quartz是一个开源的作业调度框架,它允许开发者定义作业(Job)和触发器(Trigger),并由Quartz自动调度执行。Quartz支持复杂的定时规则,如CRON表达式,可以精确到秒级别。 - 创建Job:...
【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...
Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...
Spring框架与Quartz库的整合提供了强大的动态管理定时任务的能力。下面我们将深入探讨这个主题。 Spring框架是Java开发中的核心组件,它提供了一个全面的编程和配置模型,使得开发过程更加简洁高效。Spring通过其...
Java Quartz 是一个开源的作业调度框架,用于在Java应用程序中创建和管理定时任务。它提供了丰富的API,使得开发者能够灵活地定义和执行复杂的任务调度。Quartz 的核心特性包括可配置性、可扩展性和高可靠性,使其...
总结来说,Quartz是Java中强大的定时任务库,通过它我们可以方便地创建和管理复杂的任务调度,包括但不限于在特定时间点执行任务、按固定间隔重复执行、甚至在满足特定条件时触发任务。相比`java.util.Timer`,...
总之,Quartz定时任务框架为Java开发者提供了一套灵活且功能强大的任务调度解决方案。通过理解其核心组件和API,我们可以方便地创建和管理各种定时任务,以满足各种业务需求。在这个简单的示例中,我们看到了如何每...
在Spring Boot应用中整合Quartz定时任务是一种常见的需求,它可以帮助我们执行周期性的后台任务,如数据同步、报表生成等。Spring Boot与Quartz的结合提供了便捷的配置方式,特别是通过YAML(YAML Ain't Markup ...
在Java应用中,我们可以创建自定义的Job类,继承自`org.quartz.Job`接口,并实现`execute`方法,这是执行实际任务的地方。 例如,在`QuartzJobServiceImpl.java`中,我们可能会看到以下代码片段: ```java public ...
下面将详细介绍如何利用Quartz在SpringBoot项目中创建、管理和停止定时任务,并根据业务需求配置cron表达式来设定执行周期。 1. **Quartz简介** - Quartz是Java平台上的一个强大、灵活的作业调度库,它可以与Java...
总结,Quartz定时任务完全攻略涵盖了从基础概念理解到实战应用的方方面面。通过学习和掌握Quartz,开发者可以有效地管理和调度Java应用中的定时任务,提升系统的自动化水平和效率。在实际项目中,结合Quartz提供的...
Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...
Java SpringBoot Quartz 定时任务是一个广泛应用于企业级开发中的技术组合,主要用于自动化执行周期性的任务。SpringBoot作为轻量级的框架,简化了Spring应用的初始搭建以及开发过程,而Quartz则是一个功能强大的...
Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...
【C# Quartz定时任务】是基于C#编程语言实现的一种定时任务框架,它允许开发者在.NET环境中创建和管理定时任务。这个项目是在Visual Studio 2010开发环境下编写的,提供了一个可以直接运行的示例(demo),方便快速...