118. Spring Boot Quartz在Web Project中使用【从零开始学Spring Boot】

 

【视频 & 交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

 

【下节预告:Spring Boot集成Quartz

Quartz也常用在Web应用中,常见的是交由Spring托管的形式,但这里并非介绍这个。这里介绍QuartzWeb应用中单独使用。我们看下本章的大纲:

(1)大体思路说明;
(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 2017421

 */

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);

 

视频&交流平台

à SpringBoot网易云课堂视频

http://study.163.com/course/introduction.htm?courseId=1004329008

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

 

猜你喜欢

转载自412887952-qq-com.iteye.com/blog/2370793