【视频 & 交流平台】
http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share
http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share
https://gitee.com/happyangellxq520/spring-boot
http://412887952-qq-com.iteye.com/blog/2321532
【下节预告:Spring Boot集成Quartz】
Quartz也常用在Web应用中,常见的是交由Spring托管的形式,但这里并非介绍这个。这里介绍Quartz在Web应用中单独使用。我们看下本章的大纲:
(2)新建一个Web Project;
(3)创建一个Job;
(4)创建一个ApplicationContextListener;
(5)常用的Cron Schedule;
接下来看下具体的内容:
(1)大体思路说明;
一般来说,Web应用启动时,应注册已经确定的定时任务;一些动态的、未确定触发时间的定时任务,后续可通过静态的Scheduler注册。
所以我们创建一个Web项目,在ServerContextListener初始化的时候,添加我们的定时定时任务调度器,在销毁的时候,关闭任务调度器。
(2)新建一个Web Project;
新建一个web maven project。
在pom.xml文件中添加依赖:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.1-b02</version>
</dependency>
(3)创建一个Job;
创建一个实现Job类的Class取名为HelloJob,代码如下:
package com.kfit.job;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 任务类.
* @author Angel --守护天使
* @version v.0.1
* @date 2017年4月21日
*/
public class HelloJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
// 执行响应的任务.
System.out.println("HelloJob.execute,"+new Date());
}
}
(4)创建一个ApplicationContextListener;
新建一个实现ServletContextListener的类ApplicationContextListener,代码如下:
package com.kfit.job;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
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;
@WebListener
public class ApplicationContextListener implements ServletContextListener{
private Scheduler scheduler = null;
public void contextInitialized(ServletContextEvent arg0) {
try {
/*
*在 Quartz 中, scheduler 由 scheduler 工厂创建:DirectSchedulerFactory 或者 StdSchedulerFactory。第二种工厂 StdSchedulerFactory 使用较多,
*因为 DirectSchedulerFactory 使用起来不够方便,需要作许多详细的手工编码设置。
*/
// 获取Scheduler实例
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
System.out.println("scheduler.start");
System.out.println(scheduler.getSchedulerName());
//具体任务.
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1","group1").build();
//触发时间点. (每5秒执行1次.)
SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1").startNow().withSchedule(simpleScheduleBuilder).build();
// 交由Scheduler安排触发
scheduler.scheduleJob(jobDetail,trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public void contextDestroyed(ServletContextEvent arg0) {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}//关闭定时任务调度器.
}
}
(5)常用的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://study.163.com/course/introduction.htm?courseId=1004329008
http://412887952-qq-com.iteye.com/blog/2321532