spring4 cronTrigger和simpleTrigger实现方法

Quartz官方网站对SimpleTrigger和CronTrigger的简单对比: 
     SimpleTrigger is handy if you need ‘one-shot‘ execution (just single execution of a job at a given moment in time), or if you need to fire a job at a given time, and have it repeat N times, with a delay of T between executions.当你需要的是一次性的调度(仅是安排单独的任务在指定的时间及时执行),或者你需要在指定的时间激活某个任务并执行N次,设置每次任务执行的间隔时间T。那此时使用SimpleTrigger将是非常方便的。

    CronTrigger is useful if you wish to have triggering based on calendar-like schedules - such as "every Friday, at noon" or "at 10:15 on the 10th day of every month."如果你需要安排的任务时基于日期的-比如"每个星期五正午"或者"每个月10号的10:15",使用CronTrigger将是非常有用的。

1、配置applicationcontext.xml

<!-- cronTrigger实现方式 -->
<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.ouku.entities.report.ReportTimerTask" />
        <property name="jobDataAsMap">
            <map>
                <entry key="timeout" value="3600" />
            </map>
        </property>
    </bean>
    <bean id="springUtil" class="com.ouku.util.SpringUtil" />
    <bean id="cronTrigger"
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="exampleJob" />
        <!-- run every morning at 6 AM -->
        <!-- <property name="cronExpression" value="0 0 6 * * ?" /> -->
       <!-- <property name="cronExpression" value="0 0/1 * * * ?" /> --><!-- 每分钟 -->
        <property name="cronExpression" value="0/5 * * * * ?" /> <!-- 每秒 -->
    </bean>

    <bean id="exampleBusinessObject" class="com.ouku.entities.report.ReportTimerTaskTwo" />
    <bean id="jobDetail"
<!-- simpleTrigger实现方式 -->
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="exampleBusinessObject" />
        <property name="targetMethod" value="doIt" />
        <property name="concurrent" value="false" />
    </bean>
    <bean id="simpleTrigger"
          class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <!-- see the example of method invoking job above -->
        <property name="jobDetail" ref="jobDetail" />
        <!-- 0 seconds -->
        <property name="startDelay" value="0" />
        <!-- repeat every 5 seconds -->
        <property name="repeatInterval" value="5000" />
    </bean>

    <!-- 总调度用于启动Spring定时器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>

2.利用cronTrigger的Java实现

package com.ouku.entities.report;

import java.util.Date;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import com.ouku.report.ReportTask;

public class ReportTimerTask extends QuartzJobBean  {
    private int timeout;

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    @Override
    protected void executeInternal(JobExecutionContext arg0)
            throws JobExecutionException {
        try {
            Date date = new Date();
            String dd = " " + date.getMinutes() + ":" + date.getSeconds() + " ";
            System.out.println("AAA" + dd);
            //to do
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

3.利用simpleTrigger的Java实现

package com.ouku.entities.report;

import java.util.Date;

import org.quartz.JobExecutionException;
import com.ouku.report.ReportTask;

public class ReportTimerTaskTwo {

    public void doIt() throws JobExecutionException {
        try {
            Date date = new Date();
            String dd = " " + date.getMinutes() + ":" + date.getSeconds() + " ";
            System.out.println("sss1" + dd);
            //to do ..
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

默认情况下,当Job执行时间超过间隔时间时,调度框架为了能让任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务

时间: 2024-10-05 04:09:34

spring4 cronTrigger和simpleTrigger实现方法的相关文章

Spring下的@Order和@Primary与javax.annotation-api下@Priority【Spring4.1后】等方法控制多实现的依赖注入(转)

@Order 可以作用在类.方法.属性. 影响加载顺序. 若不加,spring的加载顺序是随机的. @Primary 当注入bean冲突时,以@Primary定义的为准. @Order是控制配置类的加载顺序,还能控制List<XXX> 里面放的XXX的实现注入的顺序,下面介绍使用Spring下的@Order和@Primary与javax.annotation-api下@Priority[Spring4.1后,参考:https://jira.spring.io/browse/SPR-10548]

几种任务调度的 Java 实现方法与比较

几种任务调度的 Java 实现方法与比较 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考. 前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Qua

几种任务调度的Java实现方法与比较

简介: 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考. 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz 开源工具包 JCronTab 此

Quartz动态配置表达的方法

在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间,非常easy.比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好. Spring配置文件 Xml代码?? <bean?id="jobDetail"?class="org.springframework.

几种任务调度的 Java 实现方法与比较--转载

前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz 开源工具包 JCronTab 此外,为结合实现复杂的任务调度,本文还将介绍 Calendar 的一些使用方法. 回页首 Timer 相信大家都已经非常熟悉 java.util.Timer 了,它是最简单的一种实现任务调度的方法,下面给出一个具体的例子: 清单 1. 使用 Timer 进行任务调度 p

quarzt(官方)---给自己看的文档(CronTrigger)

第6课:CronTrigger CronTrigger通常比SimpleTrigger更有用,如果您需要一个基于日历的概念重复的作业启动计划,而不是SimpleTrigger的精确指定的间隔. 使用CronTrigger,您可以指定点火时间表,例如"每个星期五中午",或"每个工作日和上午9:30",甚至"每周一,周三上午9点到10点之间每隔5分钟和1月份的星期五". 即使如此,像CronTrigger一样,CronTrigger有一个startT

[译]Quartz.NET 框架 教程(中文版)2.2.x 之第六课 CronTrigger

第六课 CronTrigger CronTrigger比SimpleTrigger更常用,当你需要一个基于日历般概念的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间. 使用SimpleTrigger,你可以这样指定触发时间表例如“每周五的中午”,或是“每周末的上午9:30”,甚至是“一月份每周一.三.五上午9:00到10:00之间每5分钟”. 虽然如此,跟SimpleTrigger一样,CronTrigger也需要指定startTime让调度器生效,指定endTime让调度器

Quartz 第六课 CronTrigger(官方文档翻译)

CronTriggers使用的频率比SimpleTrigger跟高.如果需要schedule 中触发Job的方式类似于日历的形式而不是一个确定的是时间间隔,那就需要使用CronTrigger. 对于CronTrigger,你可以触发Schedule,例如每个周五中午或者每个工作日的下午9:30或者在早上9:00至10::之间每五分钟执行一次在每个周一.周二.周五执行. 不紧如此,SampleTrigger和CronTriggerd都有一个启动时间和一个可选的结束时间来停止. Cron Expre

APScheduler Multi CronTrigger 实现

APScheduler Multi CronTrigger 实现 最近在使用APScheduler做作业调度的时候碰到一个问题,就是有时候我的作业用一个cron trigger不能完全包含所有的触发条件,同时这个作业不能被创建多个实例. 比如期望作业在下面时间运行 每周一到周五的09:00-18:00 每周六,周日的00:00-24:00 - 此时我们可能就不能仅仅通过一个cron来描述我所有的触发条件,对于这种问题,我期望能对一个作业指定多个cron trigger,当任何一个trigger满