public class HelloQuartz implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Hello Quartz !");
}
}
使用类:
public class QuartzStartListener {
public static void main(String[] args) throws InterruptedException {
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler=null;
try {
//通过StdSchedulerFactory获取一个调度器
scheduler= schedulerFactory.getScheduler();
//创建JobDetail实例,绑定Job类
//指明job的名臣,所在组的名称看一集绑定Job类
JobDetail job = JobBuilder.newJob(HelloQuartz.class).withIdentity("JobName", "JobGroupName").build();
//定义触发规则,每3秒钟一个,共6次
Trigger triggerTest = TriggerBuilder.newTrigger().withIdentity("SimpleTrigger", "SimpleTriggerGroup")
.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(3).withRepeatCount(6)).startNow().build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("CronTrigger1", "CronTriggerGroup")
.withSchedule(CronScheduleBuilder.cronSchedule("/5 * * * * ?")).startNow().build();
//把作业和触发器注册到任务调度中
scheduler.scheduleJob(job,trigger);
//启动调度
scheduler.start();
Thread.sleep(1000*60*2);
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
Cons表达式:
序号 说明 是否必填 允许填写的值 允许的通配符
1 秒 是 0-59 , - * /
2 分 是 0-59 , - * /
3 小时 是 0-23 , - * /
4 日 是 1-31 , - * ? / L W
5 月 是 1-12 or JAN-DEC , - * /
6 周 是 1-7 or SUN-SAT , - * ? / L #
7 年 否 empty 或 1970-2099 , - * /
在线cons生成器:
http://cron.qqe2.com/
Spring中对Quartz的使用:
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
web.xml中添加监听器,监听QuartzStartListener.class
备注:放到spring中, SchedulerTest.class去掉了main方法,并且继承了ServletContextListener类,实现了他的两个方法:contextInitialized , contextDestroyed
public class QuartzStartListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//通过schedulerFactory获取一个调度器
SchedulerFactory schedulerfactory = new StdSchedulerFactory();
Scheduler scheduler = null;
try {
// 通过schedulerFactory获取一个调度器
scheduler = schedulerfactory.getScheduler();
// 创建jobDetail实例,绑定Job实现类
// 指明job的名称,所在组的名称,以及绑定job类
JobDetail job = JobBuilder.newJob(HelloQuartz.class).withIdentity("JobName", "JobGroupName").build();
// 定义调度触发规则 corn表达式 一分钟执行一次
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("CronTrigger1", "CronTriggerGroup")
.withSchedule(CronScheduleBuilder.cronSchedule("0 */1 * * * ?"))
.startNow().build();
// 把作业和触发器注册到任务调度中
scheduler.scheduleJob(job, trigger);
// 启动调度
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
web.xml的配置:
<listener>
<listener-class>com.ruixunyun.www.quartz.QuartzStartListener</listener-class>
</listener>
网友评论