QUARTZ 四大组成部分
Scheduler — 调度器,控制所有调度Trigger — 触发条件,采用DSL模式JobDetail — 需要处理的JOBJob — 执行逻辑
DSL:Domain-specific language,领域特定语言
针对一个特定的领域,具有受限表达性的一种计算机程序语言,即领域专用语言,声明式编程:
Method Chaining 方法链、Fluent Style 流畅风格、builder模式构建器Nested Functions 嵌套函数Lambda Expressions/ClosuresFunctional Sequence
QUARTZ的使用
1.下载
下载地址:http://www.quartz-scheduler.org/
使用梯子点击这里传送到下载界面
2.下载之后解压
lib文件夹中是可以添加到工程的jar包
3.给需要使用的工程添加一个名称是lib的文件夹
4.将会用到的jar包复制到工程的lib文件夹中
5.构建jar包到工程路径
这一步不执行工程是不能正常使用包的
右键所有要使用的jar包,右键添加到路径即可成功:
拿到example1以及依赖的log4j日志文件进行运行测试
import java
.util
.Date
;
import org
.slf4j
.Logger
;
import org
.slf4j
.LoggerFactory
;
import org
.quartz
.Job
;
import org
.quartz
.JobExecutionContext
;
import org
.quartz
.JobExecutionException
;
public class HelloJob implements Job {
private static Logger _log
= LoggerFactory
.getLogger(HelloJob
.class);
public HelloJob() {
}
public void execute(JobExecutionContext context
)
throws JobExecutionException
{
_log
.info("Hello World! - " + new Date());
}
}
import static org
.quartz
.DateBuilder
.evenMinuteDate
;
import static org
.quartz
.DateBuilder
.evenSecondDateAfterNow
;
import static org
.quartz
.JobBuilder
.newJob
;
import static org
.quartz
.TriggerBuilder
.newTrigger
;
import org
.quartz
.JobDetail
;
import org
.quartz
.Scheduler
;
import org
.quartz
.SchedulerFactory
;
import org
.quartz
.Trigger
;
import org
.quartz
.impl
.StdSchedulerFactory
;
import org
.slf4j
.Logger
;
import org
.slf4j
.LoggerFactory
;
import java
.util
.Date
;
public class SimpleExample {
public void run() throws Exception
{
Logger log
= LoggerFactory
.getLogger(SimpleExample
.class);
log
.info("------- Initializing ----------------------");
SchedulerFactory sf
= new StdSchedulerFactory();
Scheduler sched
= sf
.getScheduler();
log
.info("------- Initialization Complete -----------");
Date runTime
= evenSecondDateAfterNow();
log
.info("------- Scheduling Job -------------------");
JobDetail job
= newJob(HelloJob
.class).withIdentity("job1", "group1").build();
Trigger trigger
= newTrigger().withIdentity("trigger1", "group1").startAt(runTime
).build();
sched
.scheduleJob(job
, trigger
);
log
.info(job
.getKey() + " will run at: " + runTime
);
sched
.start();
log
.info("------- Started Scheduler -----------------");
log
.info("------- Waiting 65 seconds... -------------");
try {
Thread
.sleep(5L
* 1000L
);
} catch (Exception e
) {
}
log
.info("------- Shutting Down ---------------------");
sched
.shutdown(true);
log
.info("------- Shutdown Complete -----------------");
}
public static void main(String
[] args
) throws Exception
{
SimpleExample example
= new SimpleExample();
example
.run();
}
}
//3.创建JobDetail
JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
就是一个DSL流模式
//间隔执行:每五秒间隔执行一次,总共重复4次
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime)
.withSchedule(simpleSchedule().withIntervalInSeconds(5).withRepeatCount(4)).build();
对触发器更改,使得中重复执行
simpleSchedule是静态方法,要引包
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
至少得等待20秒,不然看不全结果
Thread.sleep(4*5L * 1000L);
更改后代码如下:
import static org
.quartz
.DateBuilder
.evenMinuteDate
;
import static org
.quartz
.DateBuilder
.evenSecondDateAfterNow
;
import static org
.quartz
.SimpleScheduleBuilder
.simpleSchedule
;
import static org
.quartz
.JobBuilder
.newJob
;
import static org
.quartz
.TriggerBuilder
.newTrigger
;
import org
.quartz
.JobDetail
;
import org
.quartz
.Scheduler
;
import org
.quartz
.SchedulerFactory
;
import org
.quartz
.Trigger
;
import org
.quartz
.impl
.StdSchedulerFactory
;
import org
.slf4j
.Logger
;
import org
.slf4j
.LoggerFactory
;
import java
.util
.Date
;
public class SimpleExample {
public void run() throws Exception
{
Logger log
= LoggerFactory
.getLogger(SimpleExample
.class);
log
.info("------- Initializing ----------------------");
SchedulerFactory sf
= new StdSchedulerFactory();
Scheduler sched
= sf
.getScheduler();
log
.info("------- Initialization Complete -----------");
Date runTime
= evenSecondDateAfterNow();
log
.info("------- Scheduling Job -------------------");
JobDetail job
= newJob(HelloJob
.class).withIdentity("job1", "group1").build();
Trigger trigger
= newTrigger().withIdentity("trigger1", "group1").startAt(runTime
)
.withSchedule(simpleSchedule().withIntervalInSeconds(5).withRepeatCount(4)).build();
sched
.scheduleJob(job
, trigger
);
log
.info(job
.getKey() + " will run at: " + runTime
);
sched
.start();
log
.info("------- Started Scheduler -----------------");
log
.info("------- Waiting 65 seconds... -------------");
try {
Thread
.sleep(4*5L
* 1000L
);
} catch (Exception e
) {
}
log
.info("------- Shutting Down ---------------------");
sched
.shutdown(true);
log
.info("------- Shutdown Complete -----------------");
}
public static void main(String
[] args
) throws Exception
{
SimpleExample example
= new SimpleExample();
example
.run();
}
}
已集成到Spring中 ↩︎
可以参考IO_common的使用 128.common-io环境搭建 ↩︎