Quartz 定时器任务调度

Job:是一个接口只有一个方法void execute(JobExecutionContext
context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在
JobDataMap实例中

第一种,作业类继承自特定的基  1.8测试成功,2.0不行类:org.springframework.scheduling.quartz.QuartzJobBean。

java类代码

package com.ncs.hj;  

import java.util.Date;

import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
import org.springframework.scheduling.quartz.QuartzJobBean;  

public class SpringQtz extends QuartzJobBean{  
    private static int counter = 0;  
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {  
         System.out.println(Thread.currentThread().getName());
        long ms = System.currentTimeMillis();  
        System.out.println( new Date(ms));  
        System.out.println(ms);  
        System.out.println("(" + counter++ + ")");  
        String s = (String) context.getMergedJobDataMap().get("service");  
        System.out.println(s);  
     
    }  
}

spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
       default-autowire="byName" default-lazy-init="false">
    

   
   <!--  配置调度程序quartz ,其中配置JobDetail有两种方式  
        方式一:使用JobDetailBean,任务类必须实现Job接口    -->
        <bean id="myjob" class="org.springframework.scheduling.quartz.JobDetailBean">  
        
         <property name="jobClass" value="com.ncs.hj.SpringQtz"></property> 
         <property name="jobDataAsMap">
                <map>
                    <entry key="service"><value>simple is the beat</value></entry>
                </map>
        </property>
        </bean> 
        

    <!-- ======================== 调度触发器 ======================== -->
    <bean id="CronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="myjob"></property>
        <property name="cronExpression" value="0/5 * * * * ?"></property>
    </bean>

    <!-- ======================== 调度工厂 ======================== -->
    <bean id="SpringJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="CronTriggerBean"/>
            </list>
        </property>
    </bean>  

    
</beans>


第二种,作业类不继承特定基类。1.8和2.0均测试成功, spring 4以上版本

java类

    package com.ncs.hj;  
      

      
    import java.util.Date;  
      
    public class SpringQtz2 {  
        private static int counter = 0;  
        protected void execute()  {  
            System.out.println(Thread.currentThread().getName());
            long ms = System.currentTimeMillis();  
            System.out.println( new Date(ms));  
            
            System.out.println("(" + counter++ + ")");  
        }  
    }

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
              http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
       default-autowire="byName" default-lazy-init="false">
    
  <!-- 需要定时执行的类 -->
      
        <bean id="linkConsumeController" class="com.jikexueyuancrm.controller.LinkConsumeController"/>
     
        
        
        
        
        
        <!-- 配置job,类中每个方法对应一个job  -->
        
        <bean id="consumeJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject"  ref ="linkConsumeController"/>
                
            <property name="targetMethod"   value="consume" /> <!--要执行的方法名称 -->
                  <!--禁止并发   -->
             <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 --> 
            <property name="concurrent" value="false  "/> 
        </bean>
 
  
        
        
        <!-- 每个job需要单独配置任务的定时执行(触发器)    CronTriggerFactoryBean或者SimpleTriggerFactoryBean -->
    <bean id="consumeTimer" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="consumeJob"></property>   <!--对应job -->
        <property name="cronExpression" value="0/5 * * * * ?"></property>
    </bean>
 
    
    
    
    <!-- 最终的启动工厂   list里面配置多个定时触发器-->
    <bean id="SpringJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="consumeTimer"/>
            </list>
        </property>
    </bean>
    
    
    

    
</beans>

quartz默认是多线程的

定时任务的注解配置可参考这篇文章:

http://blog.csdn.net/xpsharp/article/details/8189212

参考文章:

http://my.oschina.net/u/559635/blog/389558

http://kevin19900306.iteye.com/blog/1397744

http://blog.csdn.net/huihuimimi17/article/details/8215779

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1741169

时间: 2024-11-03 07:57:40

Quartz 定时器任务调度的相关文章

实现quartz定时器及quartz定时器原理介绍_java

一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(JobExecutionContext context) 2.JobDetailJobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略. 3.Trigger代表一个调度参数的配置,什么时候去调. 4.Sched

quartz 定时器 时间配置

问题描述 quartz 定时器 时间配置 求教各位大神,定时任务每周6的凌晨1点运行跑7个小时,这个该怎么配呢? 解决方案 0 0 1 ? * SUN 如上可以控制什么时间点执行你的程序,程序运行多长则取决于你的程序代码来记时控制 解决方案二: 能不能执行7小时,是你程序控制的,不是quartz 控制的事情. 开始执行时,程序及时,一旦7小时,停止 解决方案三: quartz的时间配置 这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月]

项目ITP(五) spring4.0 整合 Quartz 实现任务调度

正文  spring4.0 整合 Quartz 实现任务调度.这是期末项目的最后一篇,剩下到暑假吧.    Quartz 介绍   Quartz is a full-featured, open source job scheduling service that can be integrated with, or used along side virtually any Java application - from the smallest stand-alone application

crob表达式-Quartz cron任务调度时间表达式怎么写

问题描述 Quartz cron任务调度时间表达式怎么写 每天上午10点18 和下午15点 23分,这个cron表达式怎么写,请会的帮忙看下. 解决方案 Spring 任务调度Quartz的cron表达式---------------------- 解决方案二: 没这么写过,你可以写两个:* 18 10 1/1 * * * 23 15 1/1 * * 或者让它执行4次 * 18,23 10,15 1/1 * *

timer-spring quartz定时器任务时间超过定时器时间间隔,任务中断

问题描述 spring quartz定时器任务时间超过定时器时间间隔,任务中断 spring quartz定时器任务时间超过定时器时间间隔,任务中断. 大体意思就是,比如定时器是每隔十分钟进行一次,然后他执行的任务后来在10分钟之内执行不完,然后当下次定时器启动扫描的时候,第一次的任务还没有执行完,这个时候,这些任务就会被干掉,然后重新执行任务,对于这种问题,大婶们该怎么处理? 解决方案 如果这个任务方法时间过长那么就 起一个 线程处理处理

quartz 定时器-Quartz 定时器动态修改执行时间修改后出现立即执行情况

问题描述 Quartz 定时器动态修改执行时间修改后出现立即执行情况 问题描述: Spring 启动时加载定时器 执行点为 0 0 12 * * ? * 也就是每天12点执行 在11点左右修改为 0 0 14 * * ? * 也就是让它每天14点执行. 在12点多后又重新修改为 0 0 12 * * ? * 此时定时器立即执行了. 想知道是什么原因? 修改定时器的代码如下:job.getJobExpression() 就是传入的修改的执行时间 /** * @Title: modifyJobTim

时间段配置-quartz定时器框架时间配置

问题描述 quartz定时器框架时间配置 我想配置一个任务,触发时间是2014-02-25的每天13:00:00到2014-08-12的每天14:30:00,但中间的法定节日,如五一等(假设五一放假三天)节日不触发,这个如何配置

java sql编辑器 动态报表 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫

获取[下载地址]   QQ: 313596790A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩

简单封装quartz实现任务调度的配置和管理

在实际的工作和开发过程中,经常遇到有需要定时任务的场景,比如定时发送邮件,定时上传文件,定时下载文件等.当然定时任务的处理也有很多种方式.本文主要写的是对quartz的简单封装,实现方便的调用. 主要思路: 定时任务的类和定时表达式配置在自定义的配置文件中,系统启动时,读取配置文件,加载需要执行的类,并启动quartz服务. 项目结构如下: 主要包括如下类和配置文件: 1. 任务调度接口 package com.yanek.easytask.core; /** * 任务调度接口 * @autho