java定时任务quartz触发事件_Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务..._坐会儿吧的博客-程序员宅基地

技术标签: java定时任务quartz触发事件  

读完第一节,我们已经对Quartz有了一个大体的认识,它可以定时帮我们执行一些处理程序,尽管可能你之前对Quartz不了解以至于第一节很多术语(job、trigger等)不理解,没关系,从现在开始,笔者和你一起在实例中深入理解它们。没有code,就没有话语权——程序界真理

(本文章分享在CSDN平台,更多精彩请阅读 东陆之滇的csdn博客:http://blog.csdn.net/zixiao217)

本系列教程主要使用Maven风格编写代码,对于怎样使用maven,大家可以读读许晓斌的《Maven实战》,相当不错,笔者入门也是得此书。认真耐心读完哦。

本节主要内容

下载 Quartz

安装 Quartz

根据你自己的需要配置 Quartz

编写第一个示例应用程序

下载和安装Quartz

首先,你需要下载最新(不一定)稳定版本的Quartz。本系列教程我们使用2.2.1。你可以在官网http://www.quartz-scheduler.org/downloads/下载需要的版本jar包,现在我们使用maven方式:

pom.xml引入quartz依赖:

org.quartz-schedulerquartz2.2.1org.quartz-schedulerquartz-jobs2.2.1

quartz 属性配置文件

Quartz使用一个quartz.properties的属性配置文件。它不是必需的,但是使用它的话,你必须将它放置在你项目的classpath目录下,也就是最终打包后位于WEN-INF/classes目录下(web项目),使用Maven我们在src/main/resources目录放置该文件即可。

0818b9ca8b590ca3270a3433284dd417.png

Quartz是一个可配置化的应用程序。最好的配置Quartz的方式是使用quartz.properties配置文件。关于Quartz的配置属性文件的详细技巧,我们在本系列教程最后会单独讲到,务必精益求精。

迅速开始一个配置文件的内容,可以参考如下示例编写:

quartz.properties

org.quartz.scheduler.instanceName = MyScheduler org.quartz.threadPool.threadCount = 3 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

使用上述配置文件创建的任务调度程序有以下特点:

org.quartz.scheduler.instanceName - 设置调度程序scheduler的名称为MyScheduler

org.quartz.threadPool.threadCount - 线程里设置了3个线程,意味着最多同时运行3个job

org.quartz.jobStore.class - 指定为RAMJobStore,表示所有Quartz的数据,包括jobDetail、trigger等均运行在内存中(而不是数据库中)。 如果你想Quartz使用你的数据库,还是建议你在使用数据库配置之前使用RAMJobStore进行工作。通过使用一个数据库,你可以打开一个全新的维度,但在这之前,建议你使用RAMJobStore。

编写第一个quartz示例程序

第一步:编写一个job类,需要实现org.quartz.Job接口

这里编写一个样例,该任务只做一件事,就是打印任务执行时间以及汇报任务已经执行。Hello.Java代码如下:

package org.byron4j.quartz; import org.byron4j.utils.DateUtil; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 实现org.quartz.Job接口,声明该类是一个可执行任务类 *@author Administrator * */ public class HelloJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("现在是北京时间:" + DateUtil.getCurrDateTime() + " - helloJob任务执行"); } }

第二步:编写日期时间工具类,提供获取不同格式时间的公共方法

DateUtil.java代码如下:

package org.byron4j.utils; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { private static SimpleDateFormat officerSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String getCurrDateTime(){ return officerSdf.format(new Date()); } }

第三步:使用job、trigger、schedule调用定时任务

在该实例中我们使用了静态引入,引入了3个静态方法

import static org.quartz.JobBuilder.newJob; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger;

你也可以分别使用替代,视个人习惯选择:

JobBuilder.newJob(...) SimpleScheduleBuilder.simpleSchedule(...) TriggerBuilder.newTrigger(...)

QuartzTest.java代码如下:

package org.byron4j.quartz; import static org.quartz.JobBuilder.newJob; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory; public class QuartzTest { public static void main(String[] args) { try { //从调度程序工厂获取一个调度程序的实例 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //显示调度程序的名称(这里会展示我们在quartz.properties文件中的名称) System.out.println("scheduleName = " + scheduler.getSchedulerName()); /** 重要: * 定义一个job,并绑定到我们自定义的HelloJob的class对象 * 这里并不会马上创建一个HelloJob实例,实例创建是在scheduler安排任务触发执行时创建的 * 这种机制也为后面使用Spring集成提供了便利 */ JobDetail job = newJob(HelloJob.class) .withIdentity("job1", "group1") .build(); // 声明一个触发器,现在就执行(schedule.start()方法开始调用的时候执行);并且每间隔2秒就执行一次 Trigger trigger = newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(simpleSchedule() .withIntervalInSeconds(2) .repeatForever()) .build(); // 告诉quartz使用定义的触发器trigger安排执行任务job scheduler.scheduleJob(job, trigger); //启动任务调度程序,内部机制是线程的启动 scheduler.start(); //关闭任务调度程序,如果不关闭,调度程序schedule会一直运行着 //scheduler.shutdown(); } catch (SchedulerException e) { e.printStackTrace(); } } }

重点指明一下job实例创建的时机:  /** 重要:  * 定义一个job,并绑定到我们自定义的HelloJob的class对象  * 这里并不会马上创建一个HelloJob实例,实例创建是在scheduler安排任务触发执行时创建的  * 这种机制也为后面使用spring集成提供了便利  */  JobDetail job = newJob(HelloJob.class)  .withIdentity(“job1”, “group1”)  .build();

第四步:执行调用你的定时任务

运行QuartzTest.java的main方法,我们可以看到控制台输出,每隔2秒就执行了我们预先安排的打印时间和工作内容的任务:

scheduleName =MyScheduler 现在是北京时间:2016-11-05 13:08:30 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:32 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:34 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:36 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:38 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:40 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:42 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:44 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:46 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:48 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:50 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:52 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:54 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:56 - helloJob任务执行 现在是北京时间:2016-11-05 13:08:58 - helloJob任务执行 现在是北京时间:2016-11-05 13:09:00 - helloJob任务执行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34150870/article/details/114948153

智能推荐

python三角形边长分别为_python递归-一、谢尔宾斯基三角形_weixin_39866857的博客-程序员宅基地

由于专栏代码无法高亮,为了美观我就直接从csdn截图了,想复制代码可以去我的csdn,对应文章:https://blog.csdn.net/python1639er/article/details/1040384951、谢尔宾斯基三角形谢尔宾斯基三角形(Sierpinski triangle),是一种如图所示的分形这里分析一下其绘制过程1、绘制一个三角形2、取三角形的三边中点,以每两个中点及其所在...

SpringBank 开发日志 Mybatis 使用redis 作为二级缓存时,无法通过cacheEnabled=false 将其关闭..._山清水秀iOS的博客-程序员宅基地

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> &l...

使用REBOOT重启时,提示A STOP JOB IS RUNNING FOR UNATTENDED UPGRADES SHUTDOWN的解决方法_写码的猿是攻城狮的博客-程序员宅基地

1.编辑system.conf文件sudo nano /etc/systemd/system.conf2.主要修改一下两个地方:DefaultTimeoutStartSec=10sDefaultTimeoutStopSec=10s

docker部署tomcat本地应用_三颗草丶的博客-程序员宅基地_docker tomcat部署应用

环境说明:docker pulltomcat镜像,映射本地文件运行容器,这里以Jenkins为例一、拉取tomcat镜像docker pull iabhi/tomcat-alpine:8.5.23注意这里的tomcat版本最好8版本的,太高有问题二、运行容器docker run -id -d -p 8083:8080 --name jenkins -v /usr/local/tomcat/webapps/:/usr/local/apache-tomcat-8.5.23/webapp.

如何利用SAP权限设定在CS01,CS02中Change Number为必输_王小磊的博客-程序员宅基地

经常玩在QQ, 工作在MSN中,难免有些朋友问一些关于SAP的问题,而这个对create BOM 及change BOM,就有很多朋友问过相同的问题,即如果限制SAP一定要让我输入change number呢,就是传说中的下面红色的FIELD: Change Number当然这个办法其实是有几个的,一是你可以用SHD0去更改这个Screen,让这个栏位必输,那肯定也没问题,

转:IT售前咨询白皮书_weixin_34198453的博客-程序员宅基地

1 IT售前咨询白皮书之前言 到现在为止,我一直在问自己,你够格吗? 懵懂地闯入了售前咨询领域时,我几乎不明白售前是什么、应该做哪些工作,只记得最初的工作是从投标开始的。记得自己第一次独立承接标书任务时,整整用了三天时间才理出了一个提纲,然后用了十天时间完成了方案的编写,很幸运的是公司中了那个标,从此就开始了自己的售前之路。 在浑浑噩噩的头几年,我的主要工作是针对公司现...

随便推点

HTML按钮的风格,7种Material Design风格打开菜单按钮特效_医学科普联盟的博客-程序员宅基地

这是一款效果非常炫酷的Material Design风格打开菜单按钮特效。该特效有7种不同的效果,每一种效果中都可以通过点击主菜单按钮来打开一组主菜单按钮,各种打开子菜单的动画效果各不相同。使用方法HTML结构这7种打开菜单按钮特效的基本HTML结构都非常相似:使用一个来作为包裹元素,里面使用一个div元素来作为按钮组包裹元素。然后在其里面放置一个button元素作为主菜单按钮,在用一个div包裹...

java页面响应太慢,求JSP页面访问过慢的解决办法_彼一暝的博客-程序员宅基地

当前位置:我的异常网» Java Web开发»求JSP页面访问过慢的解决办法求JSP页面访问过慢的解决办法www.myexceptions.net网友分享于:2015-08-26浏览:54次求JSP页面访问过慢的解决方法在把作好的项目部署到服务器上去后可以运行,但是响应速度实在太慢,随便开个页面要等个半天,实在是受不了服务器的配置大致是:CPU 2G,内存 2G。操作系统是wi...

C语言中的time函数总结_带你去网吧里偷耳机的博客-程序员宅基地_c语言中time函数

编程中经常用到时间表达及转换的函数,它们都定义在time.h库函数中,在此做一下总结,以方便后续查看使用。几个时间概念:1:Coordinated Universal Time(UTC): 协调世界时,又称世界标准时间,也即格林威治标准时间(Greenwich Mean Time,GMT),中国内地的时间与UTC得时差为+8,也即UTC+8,美国为UTC-5。2:Calendar Time...

10. xxl-job原理---回调_Gavin_Alison的博客-程序员宅基地_xxljob回调

xxl-job: v2.0.2 原理 目录学习0. xxl-job原理1. xxl-job原理—定时任务架构2. xxl-job原理-- 调度中心3. xxl-job原理-- 执行器注册4. xxl-job原理-- 执行器注册问题5 xxl-job原理-- 执行器注册问题6. xxl-job原理-- 调度中心注册7. xxl-job原理-- 任务管理8. xxl-job原理--...

java中List<?>是什么意思?_一夜奈良山若即若离的博客-程序员宅基地_java list<?>

List指的是集合.&lt;&gt;是泛型,里面指定了这个集合中存放的是什么数据.1、集合可以有List,vector等,其实map也是一个集合2、这些集合有啥用呢,就好比你有一堆数据要存:[name='张三' , age=20, address='北京'][name='李四' , age=15, address='湖南'][name='王五' , age=18, address='甘肃']等等,这样一条一条的数据你就能够用集合来保存起来,放到一条集合中去3、例如用list来保存,保

降维与度量学习_沙雅云的博客-程序员宅基地

这是我第一次看这一章节,所以我的理解应该都是比较浅显的,写这篇博客一是写一下自己学习的感受,好记性不如烂笔头。二是为了与大家交流,希望大家给我指正。降维学习的原因k近邻学习是一种简单的学习方法,就是采用一种监督的学习方法,给定测试样本,基于某种距离找到距离样本最近的k个训练样本。可以采用投票法(选择样本中出现最多的类别作为最终的预测结果),或者采用平均法(就是采用样本中平均值作为预测结果)但是...

推荐文章

热门文章

相关标签