Quartz介绍和使用
// 6、工厂模式,组装各个组件<JOB,Trigger> sched.scheduleJob(job, trigger);
package quartz; import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import java.util.Date; /**
* Created by drubber on 2017/11/23.
* @author drubber
*/
public class HelloJob implements Job { private Logger logger = Logger.getLogger(HelloJob.class); public HelloJob() {
} @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDetail detail = context.getJobDetail();
String name = detail.getJobDataMap().getString("name");
logger.info("say hello to " + name + " at " + new Date());
System.out.println("---------------end----------------");
}
}
HelloJob
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency> <dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
pom.xml
package quartz; import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import java.util.Date; /**
* Created by drubber on 2017/11/23.
* @author drubber
*/
public class HelloJob implements Job { private Logger logger = Logger.getLogger(HelloJob.class); public HelloJob() {
} @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDetail detail = context.getJobDetail();
String name = detail.getJobDataMap().getString("name");
logger.info("say hello to " + name + " at " + new Date());
System.out.println("---------------end----------------");
}
}
HelloJob
package quartz; import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.util.Log4jConfigurer; import java.io.FileNotFoundException;
import java.util.Date; import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.TriggerBuilder.newTrigger; /**
* 此Demo将演示如何启动和关闭Quartz调度器,以及如何运作
* Created by drubber on 2017/11/23.
*
* @author drubber
*/ public class QuartzExample { private Logger log = Logger.getLogger(QuartzExample.class); public QuartzExample() { } @Before
public void initLog4j(){
try {
Log4jConfigurer.initLogging("classpath:config/log4j.properties");
} catch (FileNotFoundException e) {
System.err.println("Cannot Initialize Log4j !!!!!!");
}
} @Test
public void run() throws Exception { log.info("------- Initializing ----------------------"); // 1、工厂模式 构建Scheduler的Factory\
// 2、其中StdSchedulerFactory 为Quartz默认的Factory,默认加载quartz.properties,开发者亦可自行实现自己的Factory;Job、Trigger等组件
SchedulerFactory sf = new StdSchedulerFactory();
// 2、通过SchedulerFactory获得Scheduler对象
Scheduler sched = sf.getScheduler(); log.info("------- Initializing Complete -----------------"); // 3、org.quartz.DateBuilder.evenMinuteDate <下一分钟> -- 通过DateBuilder构建Date
//Date runTime = evenMinuteDate(new Date());
Date runTime = new Date(); log.info("------- Scheduling Job -------------------"); // 4、org.quartz.JobBuilder.newJob --通过JobBuilder构建Job
JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
//设置参数
job.getJobDataMap().put("name","drubber_ceshi"); // 5、通过TriggerBuilder进行构建
//Trigger trigger = getTrigger(runTime,"simple");
Trigger trigger = getTrigger(runTime,"cron"); // 6、工厂模式,组装各个组件<JOB,Trigger>
sched.scheduleJob(job, trigger); // [group1.job1] will run at:
log.info(job.getKey() + " will run at: " + runTime); //7、start
sched.start();
log.info("------------Started Scheduler-----------"); Thread.sleep(10 * 1000L);
log.info("-------wait 10 seconds ------"); // shut down the scheduler
log.info("------- Shutting Down ---------------------");
// 8、通过Scheduler销毁内置的Trigger和Job
sched.shutdown(true);
log.info("------- Shutdown Complete -----------------");
} private Trigger getTrigger(Date runTime, String type) {
Trigger trigger = null;
if (type.equals("simple")) {
//使用simpleTrigger 每秒执行一次 一直循环 只到关闭sched
trigger = newTrigger().withIdentity("trigger1", "group1")
.startAt(runTime)
.withSchedule(simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever())
.build();
} else if (type.equals("cron")) {
//使用CronTrigger 每2秒执行一次 一直循环 只到关闭sched
trigger = newTrigger().withIdentity("trigger1", "group1")
.startAt(runTime)
.withSchedule(cronSchedule("*/2 * * * * ? *"))
.build();
}else{
//TODO
} return trigger;
} }
QuartzExample
Quartz介绍和使用的更多相关文章
- quartz介绍
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...
- 170412、Spring Boot Quartz介绍
(1)什么是Quartz? (2)Quartz的特点: (3)Quartz专用词汇说明: (4)Quartz任务调度基本实现原理: 接下来看下具体的内容: (1)什么是Quartz? Quartz是一 ...
- Quartz任务调度基本使用
转自:http://www.cnblogs.com/bingoidea/archive/2009/08/05/1539656.html 上一篇:定时器的实现.Java定时器Timer和Quartz介绍 ...
- quartz简单实现
quartz介绍 在我们的项目中,经常会遇到某个任务需要在特定的时间点执行,这个时间点可能是每天的某分某秒,可能是一周的指定某个星期某个时间等:quartz就是实现这样一个复杂任务调度逻辑的框架. 官 ...
- JAVAEE——BOS物流项目13:Quartz概述、创建定时任务、使用JavaMail发送邮件、HighCharts概述、实现区域分区分布图
1 学习计划 1.Quartz概述 n Quartz介绍和下载 n 入门案例 n Quartz执行流程 n cron表达式 2.在BOS项目中使用Quartz创建定时任务 3.在BOS项目中使用Jav ...
- 项目ITP(六) spring4.0 整合 Quartz 实现动态任务调度
前言 系列文章:[传送门] 项目需求: http://www.cnblogs.com/Alandre/p/3733249.html 上一博客写的是基本调度,后来这只能用于,像每天定个时间 进行数据库备 ...
- 项目ITP(五) spring4.0 整合 Quartz 实现任务调度
前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用.然后需要的是 上课前20分钟 ,幸好在帮带我的学长做 p2p 的时候,接触过.自然 quartz 是首选.所以我就配置了 ...
- Spring+Quartz 实现定时任务的配置方法
Spring+Quartz 实现定时任务的配置方法 整体介绍 一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是 ...
- Spring+Quartz配置定时任务
一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合 ...
随机推荐
- Hessian Servlet实例
Servlet实例 业务场景 在下面的例子中我会发布一个简单的输出字符串的方法,然后在客户端调用并输出结果. 服务器端 环境搭建 在服务端,我们需要引入hessian和servlet的包.编写服务.配 ...
- BZOJ 4321 DP
思路: 这个DP太神了- 完全没想到 http://blog.csdn.net/geotcbrl/article/details/49663401 //By SiriusRen #include &l ...
- Linux目录结构(一)
linux文件系统的最顶端是/,称为linux的root,所有的目录.文件.设备都在/之下. 文件类型 linux有四种基本文件系统类型:普通文件.目录文件.连续文件和特殊文件.可以用file命令来识 ...
- 用Latex做介绍自己和团队科研的网页
最近实验室师妹用网上的一些模板改了改做了几个网页.感觉还可以.但是实际上总觉得好像和韩家炜.周志华他们的页面差点什么. 最近找论文时发现奥地利的hornik老先生页面居然latex做的,然后找到了下面 ...
- C# Distanct List集合
简单一维集合的使用 List<int> ages = new List<int> { 21, 46, 46, 55, 17, 21, 55, 55 }; List<str ...
- 在Windows环境下使用短信猫收发短信的简单配置:
Windows简单配置: 1.插入usb接口,打开电脑的设备管理器,装驱动后,查看端口下设备的com(串口)是多少,接下来就是配置短信猫的必须参数: 如果短信猫是COM(串口)口的,一般端口是COM1 ...
- C# 基础复习 四 ADO
调用存储过程,并接收多个表的查询结果 一个表用一个DataTable,DataSet可以存储多个DataTable DataSet需要SqlDataAdapter来填充数据 SqlConnection ...
- html css 样式中100%width 仍有白边解决办法
把 <body >改成<body style="margin=0%">
- 注解实战@Test标签
1.创建一个Maven工程 2.点击java,右键-新建一个类 package com.course.testng; import org.testng.annotations.Test; publi ...
- 加减法计算器-java
由于经常进行较大数据的加减法计算,好多计算器都是转换成科学技术法的,所以自己用java写了一个 功能如下: 1,可以输入多个带千位分隔符的数字,进行加减法计算 2,结果展示带千位分隔符 3,结果展示不 ...