java框架---->quartz的使用(一)
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。今天我们就来学习一下它的使用,这里会分篇章对它进行介绍。只是希望能有个人,在我说没事的时候,知道我不是真的没事;能有个人,在我强颜欢笑的时候,知道我不是真的开心。
quartz的使用案例
我的测试环境用的是maven,这次的测试代码是作为一个maven模块编写的(可能引用了父模块的jar依赖),首先添加quartz的依赖。
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
项目结构如下:

一、quartz的配置,这个不是必须的但是比较有用
quartz是可以灵活配置的,而最好的方式就是在应用的classpath上创建quartz.properties文件进行配置。详细的配置项,可以参考:http://www.quartz-scheduler.org/documentation/quartz-2.1.x/configuration/。下面的内容是我们本次测试的配置。
# This scheduler’s name will be “MyScheduler”.
org.quartz.scheduler.instanceName = MyScheduler
# There are threads in the thread pool, which means that a maximum of jobs can be run simultaneously.
org.quartz.threadPool.threadCount =
# All of Quartz’s data, such as details of jobs and triggers, is held in memory (rather than in a database)
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
二、开始我们的程序的编写
package com.linux.huhx.example1; import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory; /**
* @Author: huhx
* @Date: 2017-11-23 上午 8:59
*/
public class QuartzTest {
public static void main(String[] args) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start(); scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
运行上述的代码,如果已经配置了日志,可以看到如下的控制台输出。
::18.593 [main] INFO org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
::18.624 [main] INFO o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
::18.624 [main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.3. created.
::18.640 [main] INFO org.quartz.simpl.RAMJobStore - RAMJobStore initialized.
::18.640 [main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.3.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed:
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. ::18.640 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
::18.640 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.3.
::18.640 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of triggers
::18.640 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED started.
::18.640 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED shutting down.
::18.640 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED paused.
::18.640 [main] DEBUG org.quartz.simpl.SimpleThreadPool - Shutting down threadpool...
::18.640 [main] DEBUG org.quartz.simpl.SimpleThreadPool - Shutdown of threadpool complete.
::18.640 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED shutdown complete.
::19.109 [MyScheduler_Worker-] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
::19.109 [MyScheduler_Worker-] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
::19.109 [MyScheduler_Worker-] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
需要注意的一点就是:如果我们通过StdSchedulerFactory.getDefaultScheduler()的方式维护一个调度器,我们的应用不会终止直到scheduler.shutdown()方法被调用。下面我们添加一个简单的Hello的任务并加以调度。这里面我们提供QuartzTest完整的代码,我们在调度器开始后,让程序睡眠10秒。这样可以在shutdown之前,可以看到HelloJob的调度执行。
package com.linux.huhx.example1; import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory; import java.util.concurrent.TimeUnit; /**
* @Author: huhx
* @Date: 2017-11-23 上午 8:59
*/
public class QuartzTest {
public static void main(String[] args) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start(); // define the job and tie it to our HelloJob class
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build(); // 每5秒运行一次job
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
.repeatForever())
.build(); // Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
TimeUnit.SECONDS.sleep(10);
scheduler.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我们的HelloJob的代码比较简单就是输出字符串:hello world.
package com.linux.huhx.example1; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; /**
* @Author: huhx
* @Date: 2017-11-23 上午 9:02
*/
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("hello world.");
}
}
运行QuartzTest,可以看到如下的日志输出。由于我们的调度器是每5秒执行一次HelloJob,睡眠10秒之后会执行3次。
09:39:50.488 [main] INFO org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
09:39:50.519 [main] INFO o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
09:39:50.519 [main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.3.0 created.
09:39:50.519 [main] INFO org.quartz.simpl.RAMJobStore - RAMJobStore initialized.
09:39:50.519 [main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.3.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 09:39:50.519 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
09:39:50.519 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.3.0
09:39:50.519 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED started.
09:39:50.519 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
09:39:50.535 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
09:39:50.535 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=com.linux.huhx.example1.HelloJob
09:39:50.551 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
09:39:50.551 [MyScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
hello world.
09:39:55.520 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=com.linux.huhx.example1.HelloJob
09:39:55.520 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
09:39:55.520 [MyScheduler_Worker-2] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
hello world.
09:40:00.521 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=com.linux.huhx.example1.HelloJob
09:40:00.521 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
09:40:00.521 [MyScheduler_Worker-3] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
hello world.
09:40:00.536 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED shutting down.
09:40:00.536 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED paused.
09:40:00.536 [main] DEBUG org.quartz.simpl.SimpleThreadPool - Shutting down threadpool...
09:40:00.536 [main] DEBUG org.quartz.simpl.SimpleThreadPool - Shutdown of threadpool complete.
09:40:00.536 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED shutdown complete.
09:40:00.583 [MyScheduler_Worker-2] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
09:40:00.615 [MyScheduler_Worker-1] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
09:40:01.021 [MyScheduler_Worker-3] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
友情链接
java框架---->quartz的使用(一)的更多相关文章
- java框架---->quartz整合spring(一)
今天我们学习一下quartz的定时器的使用.年轻时我们放弃,以为那只是一段感情,后来才知道,那其实是一生. quartz的简单实例 测试的项目结构如下: 一.pom.xml中定义quartz的依赖 & ...
- Java任务调度开源框架quartz学习
一.quartz学习 Java框架介绍:Quartz从入门到进阶 http://edu.yesky.com/edupxpt/233/2209233.shtml 1.例子:http://javacraz ...
- Java任务调度框架Quartz入门
Quartz[kwɔːts]:石英,其框架和名字一样简单朴素又不失魅力,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框 ...
- 通过源码分析Java开源任务调度框架Quartz的主要流程
通过源码分析Java开源任务调度框架Quartz的主要流程 从使用效果.调用链路跟踪.E-R图.循环调度逻辑几个方面分析Quartz. github项目地址: https://github.com/t ...
- 开源调度框架Quartz最佳实践
开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...
- java框架之SpringBoot(14)-任务
使用 maven 创建 SpringBoot 项目,引入 Web 场景启动器. 异步任务 1.编写异步服务类,注册到 IoC 容器: package zze.springboot.task.servi ...
- 任务调度开源框架Quartz概述
任务调度开源框架Quartz 几乎每个项目中都用到了自动任务处理功能.所以在任务调度的功能很常用,但是一个好的任务调度程序是一个颇具挑战性的工作.最近用到Quartz这个框架,感觉很好,所以进行学习. ...
- 企业级任务调度框架Quartz(2)-下载和安装Quartz
1.下载和安装 Quartz 根据资料上提供的网址http://www.opensymphony.com/quartz 我们可以下载到Quartz的最新版本1.6.4: 2.下载后包的说明 ...
- 企业级任务调度框架Quartz(1) --企业应用中的任务调度介绍
由于目前的工作内容为建行CLPM批处理业务的设计工作,所以很好的理解批处理所用的任务调度框架Quartz势在必行:为了能够更好的去服务于工作,也 为了提升自己,所以我学习了Quartz Job Sch ...
随机推荐
- JAVA平台在手机上广泛应用
JAVA平台由于在手机上广泛应用,使得扩展名为jar的游戏成为目前手机游戏市场上最大的家族,直接传入手机直接安装即可. 众所周知,JAVA是一种跨平台的程序设计语言.由于其高可移植性.简单.可靠.安全 ...
- OpenStack提交代码的review流程
本文整理向openstack社区提交代码的基本流程,以及社区一些介绍资料.如有转载,请注明出处! 先放张图说明一下OpenStack的code review的大体流程: 对OpenStack提交代码更 ...
- POJ 3126 --Father Christmas flymouse【scc缩点构图 && SPFA求最长路】
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3007 Accep ...
- spring的InitializingBean的 afterPropertiesSet 方法 和 init-method配置的区别联系
InitializingBean Spirng的InitializingBean为bean提供了定义初始化方法的方式.InitializingBean是一个接口,它仅仅包含一个方法:afterProp ...
- Dubbo简介2
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成.具体可以看 百度百科 https://baike.ba ...
- Mac下给SD卡烧录树莓派系统
1.mac 磁盘工具 抹掉sd卡 为fat 2. df -h 看清sd卡号 3. 卸载sd卡 diskutil unmount /dev/disk2s2 Volume UNTITLED on disk ...
- JAVA构造方法与方法是啥意思,方法重载方法覆盖俗谈
构造函数跟构造方法是一样的,只是称呼不同; C语言里叫函数,Java里叫方法. 成员方法必须有返回类型即使是没有返回,也要写上void 构造方法没有返回类型,而且和类名一样!一个类里面,一看就知道了譬 ...
- 安卓开发笔记——打造万能适配器(Adapter)
为什么要打造万能适配器? 在安卓开发中,用到ListView和GridView的地方实在是太多了,系统默认给我们提供的适配器(ArrayAdapter,SimpleAdapter)经常不能满足我们的需 ...
- 无需Java代码通过JHipster生成有安全验证的微服务应用
让我们继续登录到我们的应用程序,并导航到Account>Login菜单项.我们将使用admin/admin作为凭据,缺省情况下,JHipster将自动创建.一切进展顺利.欢迎页面将显示确认登录成 ...
- Blender 编辑模式
1.如何进入编辑模式 可直接通过“Tab”快捷键进入编辑模式,或者选择界面底部的下拉列表: 如果想退出编辑模式,可再按下“Tab”键退出. 2.编辑选择 进入编辑状态后,我们可以通过鼠标右键来选择某个 ...