Quartz——定时任务

Quartz之前版本的使用:http://blog.csdn.net/huihuimimi17/article/details/8215779

2之后的版本使用:简单使用

package com.bxw;

import java.util.Date;

import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class Demo1Test {
    public void run() throws SchedulerException{
        System.out.println("---初始化ing---");
         //通过SchedulerFactory工厂类获取Scheduler
        SchedulerFactory sf = new StdSchedulerFactory();

        System.out.println("---初始化完成---");

        //任务执行时间
//      Date runTime = DateBuilder.evenMinuteDate(new Date());
        Date runTime = DateBuilder.evenSecondDateAfterNow(); 

        System.out.println("---将job加入Scheduler中---");
        //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
        JobDetail jd = JobBuilder.newJob(Demo1.class).withIdentity("testDemo1","group1").build();

        //描叙触发Job执行的时间触发规则,Trigger实例化一个触发器
        Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器
                        .withIdentity("trigger1","group1")//给触发器起一个名字和组名
                        //.startNow()//立即执行
                        .startAt(runTime)//设置触发时间
                        .withSchedule(
                                    SimpleScheduleBuilder.simpleSchedule()
                                    .withIntervalInSeconds(2)//时间间隔
                                    //.withRepeatCount(5)//重复次数,将执行6次
                                ).build();//产生触发器
          //运行容器,使用SchedulerFactory创建Scheduler实例
        Scheduler sched = sf.getScheduler();

        //向scheduler添加一个job和trigger
        sched.scheduleJob(jd,trigger);
        System.out.println(jd.getKey()+"运行在:"+runTime);
        sched.start();
    }

    public static void main(String[] args) throws SchedulerException {
        Demo1Test dt = new Demo1Test();
        dt.run();
    }
}

步骤:1.得到一个Sceduler    2.新建一个作业    3.新建一个触发器    4.想Scheduler添加作业和触发器    5.sceduler.start()

工具类:

package com.bxw;

import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * 任务调度公共类
 * @remark
 * @author feizi
 * @time 2015-3-23下午3:04:12
 */
public class QuartzUtil {

    private final static String JOB_GROUP_NAME = "QUARTZ_JOBGROUP_NAME";//任务组
    private final static String TRIGGER_GROUP_NAME = "QUARTZ_TRIGGERGROUP_NAME";//触发器组
    private static Logger log = LoggerFactory.getLogger(QuartzUtil.class);//日志

    /**
     * 添加任务的方法
     * @param jobName  任务名
     * @param triggerName  触发器名
     * @param jobClass  执行任务的类
     * @param seconds  间隔时间
     * @throws SchedulerException
     */
    public static void addJob(String jobName,String triggerName,Class<? extends Job> jobClass,int seconds) throws SchedulerException{
        log.info("==================initialization=================");

        //创建一个SchedulerFactory工厂实例
        SchedulerFactory sf = new StdSchedulerFactory();

        //通过SchedulerFactory构建Scheduler对象
        Scheduler sche = sf.getScheduler();

        log.info("===================initialize finshed===================");

        log.info("==============add the Job to Scheduler==================");  

        //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
        JobDetail jobDetail = JobBuilder.newJob(jobClass)
                                .withIdentity(jobName, JOB_GROUP_NAME)
                                .build();

        //构建一个触发器,规定触发的规则
        Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器
                            .withIdentity(triggerName, TRIGGER_GROUP_NAME)//给触发器起一个名字和组名
                            .startNow()//立即执行
                            .withSchedule(
                                SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInSeconds(seconds)//时间间隔  单位:秒
                                .repeatForever()//一直执行
                            )
                            .build();//产生触发器

        //向Scheduler中添加job任务和trigger触发器
        sche.scheduleJob(jobDetail, trigger);

        //启动
        sche.start();
    }

    /**
     * 测试
     * @param args
     * @throws SchedulerException
     */
    public static void main(String[] args) throws SchedulerException {
        QuartzUtil.addJob("任务一", "触发器一", Demo1.class, 2);
        QuartzUtil.addJob("任务二", "触发器二", Demo2.class, 4);
    }
}
时间: 2024-10-01 13:19:40

Quartz——定时任务的相关文章

Spring quartz定时任务service注入问题

今天想单元测试一下spring中的quartz定时任务,一顿折腾,到最后总是发现job类里注入的service为null.一开始还以为spring的配置问题,各种找原因,最后还是确定是没有注入. 就去网上搜搜吧.也找出来一些眉目.简单的理解这个原因是job是在quartz中实例化出来的,不受spring的管理.所以就导致注入不进去了.参考这个文章 http://www.tuicool.com/articles/Qjyamu 找着试试的态度,就按照文章里说的.new一个类 public class

Quartz定时任务的并行与串行

Quartz定时任务的执行策略有并行和串行之分. 所谓并行是指多个任务同时运行的情况,即若两个任务的执行时间存在重叠,两个任务同时运行的情况. 串行则是指一个任务必须等其前一个任务执行完毕之后再执行的策略. Spring集成Quartz时,控制定时任务的并行和串行是通过concurrent(译:同时发生的; 同时完成的; 同时存在的)属性实现的. 当任务系统存在多个定时任务时,任务执行很可能会存在时间上的重叠,通过设置concurrent属性为false,可以避免任务并行执行,job只能在其前一

Quartz定时任务和IIS程序池闲置超时时间冲突解决方案

一.问题描述 Bs项目中用Quartz功能执行一个定时任务(每隔5分钟执行一个Job),正常情况,Quartz定时任务会5分钟执行一次,但IIS程序池闲置 超时默认为20分钟,造成的结果是:定时任务只执行了4次.那么怎么解决程序池闲置超时引进Quartz定时任务停止执行问题? 二.解决方案方案一:设置IIS默认闲置超时为1740(跟程序池默认回收时间1740)方案二:IIS服务器规定的时间内,定时向服务器取一次数据 三.方案介绍1)方案一:设置IIS默认闲置超时为1740(跟程序池默认回收时间1

Quartz定时任务学习(二)web应用

web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用,提供了一个QuartzInitializerServlet和一个QuartzInitializerListener,用于在加载web应用时,对quartz进行初始化. <servlet>         <servlet-name>             QuartzInitial

Spring Quartz定时任务不准时执行

1. 前言 也是前段时间工作上遇到过这样的问题:quartz定时任务没有在预期的时间执行.后来研究了下quartz的机制,查明了原因,这里做个记录和分享. 2. 原因解释 先看一下spring quartz的大致机制或者说原理.quartz任务由一个主线程和线程池中的多个具体的工作线程构成. 主线程是QuartzSchedulerThread, 主要负责获取具体的定时任务和该任务执行的时间(比如可以通过cron expression 得到时间),并分发任务给线程池. 具体的任务由线程池中的工作线

对quartz定时任务的初步认识

今天就谈一谈我前两天自学的quartz定时任务吧,我对quartz定时任务的理解,就是可以设定一个时间,然后呢,在这个时间到的时候,去执行业务逻辑,这是我的简单理解,接下来看代码是如何实现的,首先有两种实现的方式,一种是通过代码实现,另一种是通过配置文件实现,我建议使用配置文件配置的方式实现定时任务,毕竟以后有什么变化,只需要改配置文件就可以了,不需要改代码,重新编译,重新部署. 先来讲一下第一种纯代码实现的定时任务. 第一步需要先下载所必须的jar包,我使用的jar包是: 第二步,写一个类实现

Quartz定时任务使用小记(11月22日)

骤然接触quartz,先从小处着手,why,what,how quartz定时任务: 为什么使用quartz定时任务,以及定时任务在实际应用场景下的特定需求. 1.用户方面的需要,为了提供更好的使用体验,例如,针对用户注册的监听,最终得到用户使用一定阶段各种提醒.互动方面的业务使用,以及针对用户生日的监听及定时任务的设置 2.数据更新的需要,针对公司日终报表的设计,这里就涉及今日的主题,数据库相关存储过程的调用.存储过程是可执行的代码块,效率相对java后台代码效率要高,尤其是针对查询时,选用存

Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar

web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用,提供了一个QuartzInitializerServlet和一个QuartzInitializerListener,用于在加载web应用时,对quartz进行初始化. <servlet> <servlet-name> QuartzInitializer </servlet-na

Java spring quartz 定时任务

首先,需要导入quartz 的jar包 ① applicationContext.xml <!-- 轮询任务 --> <import resource="classpath:/conf/quartz/ctmanage-schedule.xml" /> ② ctmanage-schedule.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q

spring quartz 定时任务“Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder”“Checking for available updated version of Quartz”

Failed to load class "org.slf4j.impl.StaticLoggerBinder 需要slf4j-api.jar.slf4j-log4j12.jar Checking for available updated version of Quartz 添加系统属性 System.setProperty("org.terracotta.quartz.skipUpdateCheck", "true"); spring quartz 定