任务调度开源框架石英动态添加,修改和删除定时任务

简介: Quartz是个开源的作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听,作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听.Quartz允许开发人员根据时间间隔(或天)来调度作业。

     Quartz是个开源的作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听,作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听.Quartz允许开发人员根据时间间隔(或天)来调度作业。

它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了Quartz的应用程序可以重用来自不同事件的作业,还可以作为一个事件组合多个作业。并且还能和Spring配置整合使用.Quartz在功能上远远超越了JDK自带的Timer,很好很强大好啦,直接上代码!

[java]  查看纯文本

 
  1. / **
  2.  * @说明: 
  3.  *
  4.  * @Title:QuartzManager.java
  5.  * @包com.joyce.quartz
  6.  * @版权:Copyright(c)2014
  7.  *
  8.  * @作者Comsys-LZP
  9.  * @date 2014-6-26下午03:15:52
  10.  * @version V2.0
  11.  * /
  12. 包 com.joyce.quartz;
  13. import  org.quartz.CronTrigger;
  14. import  org.quartz.JobDetail;
  15. 进口 org.quartz.Scheduler;
  16. import  org.quartz.SchedulerFactory;
  17. import  org.quartz.impl.StdSchedulerFactory;
  18. / **
  19.  * @Description:定时任务管理类
  20.  * 
  21.  * @ClassName:QuartzManager
  22.  * @版权:Copyright(c)2014
  23.  * 
  24.  * @作者Comsys-LZP
  25.  * @date 2014-6-26下午03:15:52
  26.  * @version V2.0
  27.  * /
  28. 公共类 QuartzManager {
  29.     private static  SchedulerFactory gSchedulerFactory =  new  StdSchedulerFactory();
  30.     私人静态 字符串JOB_GROUP_NAME =  “EXTJWEB_JOBGROUP_NAME” ;
  31.     私人静态 字符串TRIGGER_GROUP_NAME =  “EXTJWEB_TRIGGERGROUP_NAME” ;
  32.     / **
  33.      * @Description:添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
  34.      * 
  35.      * @参数jobName
  36.      *任务名
  37.      * @参数cls
  38.      *任务
  39.      * @参数时间
  40.      *时间设置,参考石英说明文档
  41.      * 
  42.      * @Title:QuartzManager.java
  43.      * @版权:Copyright(c)2014
  44.      * 
  45.      * @作者Comsys-LZP
  46.      * @date 2014-6-26下午03:47:44
  47.      * @version V2.0
  48.      * /
  49.     @SuppressWarnings (“unchecked” )
  50.     public static void  addJob(String jobName,Class cls,String time){
  51.         尝试 {
  52.             调度程序sched = gSchedulerFactory.getScheduler();
  53.             JobDetail jobDetail =  新的 JobDetail(jobName,JOB_GROUP_NAME,cls); //任务名,任务组,任务执行类
  54.             //触发器
  55.             CronTrigger触发器=  新的 CronTrigger(jobName,TRIGGER_GROUP_NAME); //触发器名,触发器组
  56.             trigger.setCronExpression(时间); //触发器时间设定
  57.             sched.scheduleJob(jobDetail,触发器);
  58.             //启动
  59.             如果 (!sched.isShutdown()){
  60.                 sched.start();
  61.             }
  62.         }  捕获 (例外五){
  63.             抛出新的 RuntimeException(e);
  64.         }
  65.     }
  66.     / **
  67.      * @Description:添加一个定时任务
  68.      * 
  69.      * @参数jobName
  70.      *任务名
  71.      * @参数jobGroupName
  72.      *任务组名
  73.      * @参数triggerName
  74.      *触发器名
  75.      * @参数triggerGroupName
  76.      *触发器组名
  77.      * @param jobClass
  78.      *任务
  79.      * @参数时间
  80.      *时间设置,参考石英说明文档
  81.      * 
  82.      * @Title:QuartzManager.java
  83.      * @版权:Copyright(c)2014
  84.      * 
  85.      * @作者Comsys-LZP
  86.      * @date 2014-6-26下午03:48:15
  87.      * @version V2.0
  88.      * /
  89.     @SuppressWarnings (“unchecked” )
  90.     public static void  addJob(String jobName,String jobGroupName,
  91.             字符串triggerName,字符串triggerGroupName,类jobClass,
  92.             字符串时间){
  93.         尝试 {
  94.             调度程序sched = gSchedulerFactory.getScheduler();
  95.             JobDetail jobDetail =  新的 JobDetail(jobName,jobGroupName,jobClass); //任务名,任务组,任务执行类
  96.             //触发器
  97.             CronTrigger trigger =  new  CronTrigger(triggerName,triggerGroupName); //触发器名,触发器组
  98.             trigger.setCronExpression(时间); //触发器时间设定
  99.             sched.scheduleJob(jobDetail,触发器);
  100.         }  捕获 (例外五){
  101.             抛出新的 RuntimeException(e);
  102.         }
  103.     }
  104.     / **
  105.      * @Description:修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
  106.      * 
  107.      * @参数jobName
  108.      * @参数时间
  109.      * 
  110.      * @Title:QuartzManager.java
  111.      * @版权:Copyright(c)2014
  112.      * 
  113.      * @作者Comsys-LZP
  114.      * @date 2014-6-26下午03:49:21
  115.      * @version V2.0
  116.      * /
  117.     @SuppressWarnings (“unchecked” )
  118.     public static void  modifyJobTime(String jobName,String time){
  119.         尝试 {
  120.             调度程序sched = gSchedulerFactory.getScheduler();
  121.             CronTrigger触发器=(CronTrigger)sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
  122.             if  (trigger ==  null ){
  123.                 返回;
  124.             }
  125.             String oldTime = trigger.getCronExpression();
  126.             if  (!oldTime.equalsIgnoreCase(time)){
  127.                 JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME);
  128.                 Class objJobClass = jobDetail.getJobClass();
  129.                 removeJob(JOBNAME);
  130.                 addJob(jobName,objJobClass,time);
  131.             }
  132.         }  捕获 (例外五){
  133.             抛出新的 RuntimeException(e);
  134.         }
  135.     }
  136.     / **
  137.      * @Description:修改一个任务的触发时间
  138.      * 
  139.      * @参数triggerName
  140.      * @参数triggerGroupName
  141.      * @参数时间
  142.      * 
  143.      * @Title:QuartzManager.java
  144.      * @版权:Copyright(c)2014
  145.      * 
  146.      * @作者Comsys-LZP
  147.      * @date 2014-6-26下午03:49:37
  148.      * @version V2.0
  149.      * /
  150.     public static void  modifyJobTime(String triggerName,
  151.             字符串triggerGroupName,字符串时间){
  152.         尝试 {
  153.             调度程序sched = gSchedulerFactory.getScheduler();
  154.             CronTrigger触发=(CronTrigger)sched.getTrigger(triggerName,triggerGroupName);
  155.             if  (trigger ==  null ){
  156.                 返回;
  157.             }
  158.             String oldTime = trigger.getCronExpression();
  159.             if  (!oldTime.equalsIgnoreCase(time)){
  160.                 CronTrigger ct =(CronTrigger)触发器;
  161.                 //修改时间
  162.                 ct.setCronExpression(时间);
  163.                 //重启触发器
  164.                 sched.resumeTrigger(triggerName,triggerGroupName);
  165.             }
  166.         }  捕获 (例外五){
  167.             抛出新的 RuntimeException(e);
  168.         }
  169.     }
  170.     / **
  171.      * @Description:移除一个任务(使用默认的任务组名,触发器名,触发器组名)
  172.      * 
  173.      * @参数jobName
  174.      * 
  175.      * @Title:QuartzManager.java
  176.      * @版权:Copyright(c)2014
  177.      * 
  178.      * @作者Comsys-LZP
  179.      * @date 2014-6-26下午03:49:51
  180.      * @version V2.0
  181.      * /
  182.     public static void  removeJob(String jobName){
  183.         尝试 {
  184.             调度程序sched = gSchedulerFactory.getScheduler();
  185.             sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME); //停止触发器
  186.             sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME); //移除触发器
  187.             sched.deleteJob(jobName,JOB_GROUP_NAME); //删除任务
  188.         }  捕获 (例外五){
  189.             抛出新的 RuntimeException(e);
  190.         }
  191.     }
  192.     / **
  193.      * @Description:移除一个任务
  194.      * 
  195.      * @参数jobName
  196.      * @参数jobGroupName
  197.      * @参数triggerName
  198.      * @参数triggerGroupName
  199.      * 
  200.      * @Title:QuartzManager.java
  201.      * @版权:Copyright(c)2014
  202.      * 
  203.      * @作者Comsys-LZP
  204.      * @date 2014-6-26下午03:50:01
  205.      * @version V2.0
  206.      * /
  207.     public static void  removeJob(String jobName,String jobGroupName,
  208.             字符串triggerName,字符串triggerGroupName){
  209.         尝试 {
  210.             调度程序sched = gSchedulerFactory.getScheduler();
  211.             sched.pauseTrigger(triggerName,triggerGroupName); //停止触发器
  212.             sched.unscheduleJob(triggerName,triggerGroupName); //移除触发器
  213.             sched.deleteJob(jobName,jobGroupName); //删除任务
  214.         }  捕获 (例外五){
  215.             抛出新的 RuntimeException(e);
  216.         }
  217.     }
  218.     / **
  219.      * @Description:启动所有定时任务
  220.      * 
  221.      * 
  222.      * @Title:QuartzManager.java
  223.      * @版权:Copyright(c)2014
  224.      * 
  225.      * @作者Comsys-LZP
  226.      * @date 2014-6-26下午03:50:18
  227.      * @version V2.0
  228.      * /
  229.     公共静态无效的 startJobs(){
  230.         尝试 {
  231.             调度程序sched = gSchedulerFactory.getScheduler();
  232.             sched.start();
  233.         }  捕获 (例外五){
  234.             抛出新的 RuntimeException(e);
  235.         }
  236.     }
  237.     / **
  238.      * @Description:关闭所有定时任务
  239.      * 
  240.      * 
  241.      * @Title:QuartzManager.java
  242.      * @版权:Copyright(c)2014
  243.      * 
  244.      * @作者Comsys-LZP
  245.      * @date 2014-6-26下午03:50:26
  246.      * @version V2.0
  247.      * /
  248.     public static void  shutdownJobs(){
  249.         尝试 {
  250.             调度程序sched = gSchedulerFactory.getScheduler();
  251.             如果 (!sched.isShutdown()){
  252.                 sched.shutdown();
  253.             }
  254.         }  捕获 (例外五){
  255.             抛出新的 RuntimeException(e);
  256.         }
  257.     }
  258. }

以上就是石英任务调度对于任务的常用操作,封装起来以便在外部调用这样我们就需要任务的执行了!

[java]  查看纯文本

 
  1. / **
  2.  * @说明: 
  3.  *
  4.  * @Title:QuartzJob.java
  5.  * @包com.joyce.quartz
  6.  * @版权:Copyright(c)2014
  7.  *
  8.  * @作者Comsys-LZP
  9.  * @date 2014-6-26下午03:37:11
  10.  * @version V2.0
  11.  * /
  12. 包 com.joyce.quartz;
  13. import  java.text.SimpleDateFormat;
  14. import  java.util.Date;
  15. 进口 org.quartz.Job;
  16. import  org.quartz.JobExecutionContext;
  17. import  org.quartz.JobExecutionException;
  18. / **
  19.  * @Description:任务执行类
  20.  *
  21.  * @ClassName:QuartzJob
  22.  * @版权:Copyright(c)2014
  23.  *
  24.  * @作者Comsys-LZP
  25.  * @date 2014-6-26下午03:37:11
  26.  * @version V2.0
  27.  * /
  28. 公共类 QuartzJob  实现 作业{
  29.     @覆盖
  30.     public void  execute(JobExecutionContext arg0)  throws  JobExecutionException {
  31.         System.out.println(new  SimpleDateFormat(“yyyy-MM-dd HH:mm:ss” ).format(new Date())+  “” );
  32.     }
  33. }

好吧,我们来测试一下:

[java]  查看纯文本

 
  1. / **
  2.  * @说明: 
  3.  *
  4.  * @Title:QuartzTest.java
  5.  * @包com.joyce.quartz.main
  6.  * @版权:Copyright(c)2014
  7.  *
  8.  * @作者Comsys-LZP
  9.  * @date 2014-6-26下午03:35:05
  10.  * @version V2.0
  11.  * /
  12. 包 com.joyce.quartz.main;
  13. import  com.joyce.quartz.QuartzJob;
  14. import  com.joyce.quartz.QuartzManager;
  15. / **
  16.  * @Description:测试类
  17.  *
  18.  * @ClassName:QuartzTest
  19.  * @版权:Copyright(c)2014
  20.  *
  21.  * @作者Comsys-LZP
  22.  * @date 2014-6-26下午03:35:05
  23.  * @version V2.0
  24.  * /
  25. 公共类 QuartzTest {
  26.     public static void  main(String [] args){
  27.         尝试 {
  28.             String job_name =  “动态任务调度” ;
  29.             System.out.println(“【系统启动】开始(每1秒输出一次)...” );
  30.             QuartzManager.addJob(JOB_NAME,QuartzJob 类,  “0/1 * * * *?” );
  31.             Thread.sleep(5000 );
  32.             System.out.println(“【修改时间】开始(每2秒输出一次)...” );
  33.             QuartzManager.modifyJobTime(job_name,  “10/2 * * * *?” );
  34.             Thread.sleep(6000 );
  35.             System.out.println(“【移除定时】开始...” );
  36.             QuartzManager.removeJob(JOB_NAME);
  37.             System.out.println(“【移除定时】成功” );
  38.             System.out.println(“【再次添加定时任务】开始(每10秒输出一次)...” );
  39.             QuartzManager.addJob(JOB_NAME,QuartzJob 类,  “* / 10 * * * *?” );
  40.             Thread.sleep(60000 );
  41.             System.out.println(“【移除定时】开始...” );
  42.             QuartzManager.removeJob(JOB_NAME);
  43.             System.out.println(“【移除定时】成功” );
  44.         }  捕获 (例外五){
  45.             e.printStackTrace();
  46.         }
  47.     }
  48. }

 原文地址http://www.bieryun.com/850.html

相关文章
|
11月前
|
人工智能 机器人 API
🤖 AstrBot 安卓 App:让每一个普通人都能拥有自己的 AI 聊天机器人
🤖 AstrBot 安卓 App:让每一个普通人都能拥有自己的 AI 聊天机器人
3820 6
🤖 AstrBot 安卓 App:让每一个普通人都能拥有自己的 AI 聊天机器人
|
7月前
|
SQL 关系型数据库 MySQL
MySQL 慢 SQL 排查这件事,NineData 社区VS DBeaver/ Navicat 技术分析
DBeaver Community 和 Navicat Premium Lite 都是实用的客户端工具,在单条 SQL 的查询和验证上,依然是 DBA 常用的入口。NineData 社区版的定位不同,它是免费、本地化部署的数据管理平台,将数据库DevOps、数据复制、数据库对比三大能力整合于一体。
|
8月前
|
存储 弹性计算 Linux
2026年阿里云服务器购买攻略:三种核心购买方式对比与实操指南
阿里云服务器提供快速购买、自定义购买和活动购买三种方式,适合不同场景需求。选购前需综合考量业务场景、成本策略、地域选择及安全合规。快速购买适用于基础配置速购,提供基础、标准、专业、增强四类套餐,匹配个人开发、企业官网、电商平台等场景,并需注意镜像选择(如Alibaba Cloud Linux性能优化)、带宽计费模式(固定带宽、按量计费、共享带宽包)及完整购买流程。
|
机器学习/深度学习 弹性计算 缓存
简单聊聊,阿里云2核2G3M带宽云服务器与轻量应用服务器区别及选择参考
2核2G3M带宽云服务器与轻量应用服务器是目前阿里云的活动中,入门级走量型云服务器,轻量云服务器2核2G3M带宽68元一年,经济型e实例云服务器2核2G3M带宽99元1年。同样的配置,对于有的新手用户来说,有必要了解一下他们之间的区别,以及各自的购买和续费相关政策,从而选择更适合自己需求的云服务器。本文为大家简单分析一下我们应该选择哪一款。
|
API 数据安全/隐私保护 网络架构
API接口
API(应用程序编程接口)是软件间通信的标准方式,通过定义规则和协议,便于开发者构建和集成服务。它通常基于RESTful架构或GraphQL实现,使用HTTP方法进行数据交互。以RESTful API为例,它通过GET、POST、PUT、DELETE等方法执行数据操作。示例中使用Python的requests库调用OpenWeatherMap API获取天气信息,展示了GET请求的实现。实际应用中,API还需结合OAuth 2.0等认证机制保障安全性。
|
存储 固态存储 异构计算
阿里云服务器租用一个月教程、收费标准与活动价格参考
阿里云服务器可以月租也可以年租,阿里云的活动中云服务器时长大多都是1年或3年,比较符合大多数用户的需求,但是也有少部分用户只想购买1个月或者3个月、6个月阿里云服务器来体验,但是又不知道选择月付的具体租用流程及月付的收费标准情况,本文为大家介绍一下租用时选择月付的具体流程以及月付的收费标准情况,以供参考。
阿里云服务器租用一个月教程、收费标准与活动价格参考
|
人工智能 前端开发 API
手动开发?给我一条提示词,CodeBuddy能做的你都做不到!
本文介绍了使用CodeBuddy完成的一个五一期间的小项目,主要展示其编码能力。项目采用基础的HTML+CSS+JS实现界面,也提到可用React或Next.js复刻。文章重点讲解了通过提示词生成代码的方法,包括局部和整体两种方式,并展示了AI旅行规划功能的实现过程。通过与模型对话调整细节,最终生成满意的界面。CodeBuddy在前后端开发中表现出强大能力,未来可结合绘画作品生成惊艳网站。
|
自然语言处理 前端开发 Java
API管理平台:你用的到底是哪个?
本文介绍了多个API管理和文档工具,包括Apifox、Swagger及其增强版Knife4j和RapiDoc、阿里RAP、去哪儿YApi以及Redoc。这些工具各有特色,适用于不同的开发场景。Apifox提供一体化协作平台,支持API文档、调试、Mock和测试;Swagger结合Knife4j适合Java与前端团队,界面美观且功能丰富;YApi则适用于跨语言开发,支持多种API形式的管理;阿里RAP专注于接口文档管理和Mock服务;Redoc则是开源的现代化API文档浏览器。总结而言,选择工具应根据团队需求和技术栈来决定。
5748 16
|
Ubuntu 开发工具 C++
Ubuntu 22.04上编译安装c++ libconfig library
通过本文的介绍,我们详细讲解了如何在Ubuntu 22.04上编译和安装libconfig库,并通过编写和运行一个简单的测试程序来验证安装是否成功。libconfig库的安装过程相对简单,主要包括环境准备、下载源码、编译和安装几个步骤。希望本文对您在项目中使用libconfig库有所帮助。
1034 13
|
数据采集 人工智能 物联网

热门文章

最新文章