php quartz,Quartz使用介紹

Qaurtz简介

Quartz是一个完全由java编写的任务调度框架。

那么什么是任务调度呢?很多时候你可能会收到某个需求,要求程序 “ 隔某个特定的时间段 在某个特定的时间 做某个特定的事情 ”,比如:

每天早上8:00自动发送早安给你的爸爸妈妈

每年12月1日0点发送生日祝福给你的朋友

每个月的9号自动还款蚂蚁花呗

这些都是任务调度。而Quartz就是可以方便你创建各种任务定时执行的一个框架,而且触发这些任务的时间点可以设计的非常复杂,几乎都能完美匹配你的要求。

优点

简单高效。Quartz用起来非常简单。你只要写一个继承org.quartz.Job的job类,将逻辑写入execute()方法,并将这个类设定好时间,之后Quartz就能自动帮你监控这个任务,到了指定时间自动执行,就不再需要你管这些任务了。

容错。 如果其中的一个节点挂了,并不会影响其他节点上面任务的执行。

支持分布式

主要API

Scheduler - 与调度器交互的主要API。

Job - 需要被调度器调度的任务必须实现的接口。

JobDetail - 用于定义任务的实例。

Trigger - 用于定义调度器何时调度任务执行的组件。

JobBuilder - 用于定义或创建JobDetail的实例 。

TriggerBuilder - 用于定义或创建触发器实例。

实例介绍

使用Quartz开发,首先,你要写一个实现org.quartz.Job的类,重写org.quartz.Job接口唯一的方法execute(),在这个方法里面写你要定时执行的代码。

public class TestJob implements Job{

public void execute(JobExecutionContext arg0) throws JobExecutionException {

Date date=new Date();

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.print("now:"+sf.format(date));

}

}

然后,创建一个执行任务的类,创建scheduler,这可以理解为一个调度程序-任务执行计划表,在这个表里面对各个job任务进行时间分配。

SchedulerFactory sfact = new StdSchedulerFactory();

Scheduler schedule = sfact.getScheduler();

然后,创建JobDetail的实例,指定执行哪个job。

JobDetail jobDetail1 = JobBuilder.newJob((Class extends Job>) TestJob.class) //定义Job类为TestJob类

.withIdentity("myjob1", "group1") //定义name、group

.build();

然后,创建一个CronTrigger实例,指定执行时间。

CronTrigger trigger1 =(CronTrigger) TriggerBuilder.newTrigger()

.withIdentity("trigger1", "group1")

.withSchedule(CronScheduleBuilder.cronSchedule("0 0 10 ? * MON")) //每週一早上十點執行

.build();

最后,将哪个job由哪个trigger触发安排设置进调度程序-任务执行计划表,并启动它。

schedule.scheduleJob(jobDetail1, trigger1);

schedule.start();

至此,一个定时任务就写出来了,真的很简单。

完整代码如下:

public class QuartzLoad {

private static Scheduler sched;

public static void run() throws Exception {

//一個job可以對應多個tigger,但是一個trigger不能對應多個job。

System.out.println("啟動定時任務");

//创建Scheduler

SchedulerFactory sfact = new StdSchedulerFactory();

sched = sfact.getScheduler();

//每週一早上8點执行任务

JobDetail jobDetail1 = JobBuilder.newJob((Class extends Job>) TestJob.class)

.withIdentity("myjob1", "group1").build();

CronTrigger trigger1 =(CronTrigger) TriggerBuilder.newTrigger()

.withIdentity("trigger1", "group1")

.withSchedule(CronScheduleBuilder.cronSchedule("0 0 8 ? * MON"))

.build();

schedule.scheduleJob(jobDetail1, trigger1);

schedule.start();

}

//停止

public static void stop() throws Exception{

sched.shutdown();

}

}

可以先用main方法启动试试,如果是web项目可以用监听器启动。例:

/**

* 監聽器

*

*/

public class TimingTaskSchedule implements ServletContextListener{

// 服务器启动时执行该事件

public void contextInitialized(ServletContextEvent arg0) {

try {

QuartzLoad.run();

} catch (Exception e) {

e.printStackTrace();

}

}

// 服务器停止时执行该事件

public void contextDestroyed(ServletContextEvent arg0) {

try {

QuartzLoad.stop();

} catch (Exception e) {

e.printStackTrace();

}

}

}

Trigger

Quartz提供了多种触发器,比较常用的有 CronTrigger和SimpleTrigger ,创建触发器时的时间表达式怎么写?见这篇博客:点击链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值