quartz搭建与应用
1.添加依赖
依赖包括Quartz和logback
<dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.0</version>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
2.简单搭建
引入jar包
在quartz.properties中配置quartz
org.quartz.scheduler.instanceName = MyScheduler
#个数随实际情况而定
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
logback.xml,日志框架logback的配置
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder
by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender> <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>D:/logs/quartz_task_application.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender> <root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root> </configuration>
HelloJob.java,具体要执行任务
package No01; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class HelloJob implements Job { Logger logger = LoggerFactory.getLogger(this.getClass()); @Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// 此任务仅打印日志便于调试、观察
this.logger.debug(this.getClass().getName() + " trigger...");
} }
定义执行任务的时间和任务内容
package No01; import java.util.concurrent.TimeUnit; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class Bootstrap {
private static Logger logger = LoggerFactory.getLogger(Bootstrap.class);
public static void main(String[] args) {
try {
// 获取Scheduler实例
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start(); // 具体任务
JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build(); // 触发时间点
SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startNow().withSchedule(simpleScheduleBuilder).build();
// 交由Scheduler安排触发
scheduler.scheduleJob(job, trigger); /* 为观察程序运行,此设置主程序睡眠3分钟才继续往下运行(因下一个步骤是“关闭Scheduler”) */
try {
TimeUnit.MINUTES.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 关闭Scheduler
scheduler.shutdown(); } catch (SchedulerException se) {
logger.error(se.getMessage(), se);
}
} }
3.在web应用中使用quartz
Quartz常在Web中应用,常见的是交由Spring托管的形式。这里介绍Quartz在Web应用中单独使用。
一般Web应用启动时,应注册已经确定的定时任务;一些动态的、未确定触发时间的定时任务,后续可通过静态的Scheduler注册。
使用监听器在应用启动时注册,并在web.xml注册这个监听器;在关闭Web应用时,要注销定时任务。
其他配置文件、Java类与上例子相同,只是把这里注册定时任务的地方换成此监听器。
package No02; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import No01.HelloJob; /**
* Application Lifecycle Listener implementation class AListener
*
*/
public class ApplicationContextListener implements ServletContextListener { private Logger logger = LoggerFactory.getLogger(this.getClass()); public static Scheduler scheduler = null; @Override
public void contextInitialized(ServletContextEvent arg0) {
this.logger.info("The application start..."); /* 注册定时任务 */
try {
// 获取Scheduler实例
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start(); // 具体任务
JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build(); // 触发时间点
SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startNow().withSchedule(simpleScheduleBuilder).build(); // 交由Scheduler安排触发
scheduler.scheduleJob(job, trigger); this.logger.info("The scheduler register...");
} catch (SchedulerException se) {
logger.error(se.getMessage(), se);
}
} @Override
public void contextDestroyed(ServletContextEvent arg0) {
this.logger.info("The application stop..."); /* 注销定时任务 */
try {
// 关闭Scheduler
scheduler.shutdown(); this.logger.info("The scheduler shutdown...");
} catch (SchedulerException se) {
logger.error(se.getMessage(), se);
}
} }
<listener>
<listener-class>No02.ApplicationContextListener</listener-class>
</listener>
在eclipse调试中,可能发现无法看到contextDestroy方法的执行,请注意使用stop的方式关闭应用,而不是terminate
图一
aaarticlea/png;base64,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" alt="" />
图二
aaarticlea/png;base64,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" alt="" />
4常用的Cron Schedule
相对于其他方式定义定时任务的触发时间,我们较常用Cron Schedule。
// 具体任务
JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build(); // 触发时间点
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 * * * * ? *");
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(cronScheduleBuilder).build(); // 交由Scheduler安排触发
scheduler.scheduleJob(job, trigger);
本文参考:http://www.cnblogs.com/nick-huang/p/4848843.html
quartz搭建与应用的更多相关文章
- 使用Quartz搭建定时任务脚手架
定时任务的实现有很多种,在Spring项目中使用一个注解 @Scheduled就可以很快搞定. 但是很难去管理项目中的定时任务,比如说:系统中有多少定时任务,每个定时任务执行规则,修改执行规则,暂停任 ...
- 定时任务框架Quartz-(一)Quartz入门与Demo搭建
注:本文来源于:是Guava不是瓜娃 <定时任务框架Quartz-(一)Quartz入门与Demo搭建> 一.什么是Quartz 什么是Quartz? Quartz是OpenSympho ...
- 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务
Ø 前言 之前一篇文章已经介绍了,如何使用 Topshelf 创建 Windows 服务.当时提到还缺少一个任务调度框架,就是 Quartz.NET.而本文就展开对 Quartz.NET 的研究,以 ...
- 分布式任务调度系统xxl-job搭建
为解决分布式环境下定时任务的可靠性,稳定性,只执行一次的特性,我找到了个大众点评开源的分布式调度任务解决完整系统,下面我将一步步深入解读该系统,从基本的使用到源码的探究 下载 https://gith ...
- Quartz -----定时任务框架
一.什么是Quartz 由java开发用来执行定时任务,类似于java.util.Timer. 但是相较于Timer,quartz增加了很多功能: 持久性 ...
- spring boot / cloud (十五) 分布式调度中心进阶
spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...
- .Net Core 微服务容器系列基础目录篇
1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...
- xxl-job使用遇到的问题
1.背景 最近公司在迁移定时任务,以前老的定时任务是基于quartz搭建的分布式集群服务,遇到如下几个瓶颈问题: 同一个任务只能有一个节点运行,其他节点不执行,导致性能低,资源也浪费 定时任务在抢占执 ...
- 【Quartz】Quartz的搭建、应用(单独使用Quartz)
Quartz在Java构建的系统中,是十分常用的定时任务框架. 本文,记录.介绍Quartz的简单入门的单独搭建(此文入门学习Quartz为主,并非基于Spring托管形式). > 参考的优秀资 ...
随机推荐
- hdu 4545 魔法串 2013金山西山居创意游戏程序挑战赛——初赛(1)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4545 这题太坑了,小明的串可以任意删掉某个字符 这句话不知道大家是怎么理解的,我觉得应该是能够删除其中 ...
- 设置cmd的codepage的方法
设置cmd的codepage的方法 有时候,我们的cmd.exe的codepage和字体等会变化,比如突然由中文变成英文的codepage(因为一些sh程序的干扰). 下面是修正方法: [HKEY_C ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- cocos2dx mac下搭建android开发环境
1)下载eclipse 地址:http://www.eclipse.org/downloads/ 2)安装adt 打开eclipse,菜单:help->install new software ...
- golang(5):编写WebSocket服务,client和html5调用
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ...
- 彻底解决Android因加载多个大图引起的OutOfMemoryError,内存溢出的问题
最近因为项目里需求是选择或者拍摄多张照片后,提供滑动预览和上传,很多照片是好几MB一张,因为目前的Android系统对运行的程序都有一定的内存限制,一般是16MB或24MB(视平台而定),不做处理直接 ...
- j详细说明ava于clone办法
原文地址:http://leihuang.org/2014/11/14/java-clone/ In java, it essentially means the ability to create ...
- css代码优化篇
心情比较不咋地,不想说什么了 代码演示如下: 不推荐 .fw-800 { font-weight: 800; } .red { color: red; } 推荐 .heavy { font-weigh ...
- visual studio2013负载测试简单问题记录
问题1: 错误 xxxx/xx/xx xx:xx:xx 未能对测试运行“xxxxxxxxxxx”进行排队: 活动的测试设置配置为使用 Visual Studio Online 运行测试. 使用团队资源 ...
- sql Servers数据库基础
1. 数据库约束包含: ·非空约束 ·主键约束(PK) primary key constraint 唯一且不为空 ·唯一约束(UQ) unique constraint 唯一 ...