`
qq123zhz
  • 浏览: 530640 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

quartz 定时任务调度

 
阅读更多

 很有用的quartz的学习资料。。。

本人最近也一值在项目是使用。。。。。

package com.chinaGPS.driverBook.service.impl;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;

import com.chinaGPS.driverBook.dao.ScheduleDao;
import com.chinaGPS.driverBook.pojo.ScheduleInfo;
import com.chinaGPS.driverBook.service.IQuartzTaskService;
import com.chinaGPS.driverBook.service.job.WeatherJob;

/**
 * 定义任务调度
 * 
 * @author zhz
 * 
 */
public class QuartzTaskService implements IQuartzTaskService {

	private static final String WEATHERJOBNAME = "weatherTrigger";
	private static final String WEATHERGROUP = "weatherGroup";
	private static final String WEATHERTARGETMETHOD = "saveCityWeather";

	private static IQuartzTaskService manager;
	private Scheduler schedulerFactory;
	private WeatherJob weatherJob;
	private ScheduleDao scheduleDao;
	private CronTriggerBean trigger;
	private JobDetail weatherJobDetail;

	public ScheduleDao getScheduleDao() {
		return scheduleDao;
	}

	public void setScheduleDao(ScheduleDao scheduleDao) {
		this.scheduleDao = scheduleDao;
	}

	public WeatherJob getWeatherJob() {
		return weatherJob;
	}

	public void setWeatherJob(WeatherJob weatherJob) {
		this.weatherJob = weatherJob;
	}

	public Scheduler getSchedulerFactory() {
		return schedulerFactory;
	}

	public void setSchedulerFactory(Scheduler schedulerFactory) {
		this.schedulerFactory = schedulerFactory;
	}

	@Override
	public void reWeatherCatchScheduleJob() {
		try {
			// 运行时可通过动态注入的scheduler得到trigger
		
			
			List<ScheduleInfo> dbCronExpressionList = getCronExpressionFromDB();
			
			//先清除trigger
			String [] triggesName = schedulerFactory.getTriggerNames(WEATHERGROUP);
			for (int i = 0; i < triggesName.length; i++) {
				String triggerName = triggesName[i];
				schedulerFactory.unscheduleJob(triggerName, WEATHERGROUP);
			}
			if(schedulerFactory.getTriggerNames(WEATHERGROUP).length==0){
			//然后暂停任务工厂
				 System.out.println("后台定时调度天气任务,重置。。。。。");
			}
			for (ScheduleInfo info : dbCronExpressionList) {
				weatherJobDetail =  new JobDetail(info.getId(), WEATHERGROUP, WeatherJob.class);
				trigger = new CronTriggerBean();
				trigger.setName(info.getId());
//				trigger.setJobDetail(weatherJobDetail);
				trigger.setGroup(WEATHERGROUP);
				trigger.setCronExpression(info.getJobCronExp());
				schedulerFactory.scheduleJob(weatherJobDetail,trigger);
			}
			schedulerFactory.startDelayed(3);
			
		} catch (SchedulerException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		// 下面是具体的job内容,可自行设置
		weatherJob.saveCityWeather();
		// executeJobDetail();

	}

	private List<ScheduleInfo> getCronExpressionFromDB() {
		return scheduleDao.findAll();
		// return "0/10 * * * * ?";
	}

	public static void main(String[] args) {
		Collection<String> files = new ArrayList<String>();
		files.add("/WebContent/WEB-INF/spring/*.xml");
		FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(
				files.toArray(new String[0]));
		manager = (IQuartzTaskService) ctx.getBean("quartzTaskService");

		manager.reWeatherCatchScheduleJob();

	}

}

 

以上是编程调用。。。。

<?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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context-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/tx 
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
	default-autowire="byName">


	
	
	<!-- 每天晚上12点调度     三个任务 -->
	<bean id="sysPwdJob" class="com.chinaGPS.driverBook.service.job.SysPwdSuccessJob">
		<property name="userManagerService" ref="userManagerService"></property>
	</bean>
	<bean id="servicePwdJob" class="com.chinaGPS.driverBook.service.job.ServicePwdFailResetJob">
		<property name="userManagerService" ref="userManagerService"></property>
	</bean>
	<bean id="carBindJob" class="com.chinaGPS.driverBook.service.job.BindCarFailResetJob"></bean>
	<!-- 天气任务 -->
	<bean id="weatherJob" class="com.chinaGPS.driverBook.service.job.WeatherJob"></bean>
	
	
	<!-- 定时任务开始 -->
	<bean id="sysPwdJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="sysPwdJob"/>
		</property>
		<property name="targetMethod">
			<value>resetCount</value>
		</property>
	</bean>
	<bean id="servicePwdJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="servicePwdJob"/>
		</property>
		<property name="targetMethod">
			<value>resetCount</value>
		</property>
	</bean>
	<bean id="carBindJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="carBindJob"/>
		</property>
		<property name="targetMethod">
			<value>resetCount</value>
		</property>
	</bean>
	<!-- 天气任务  保存json任务-->
	<bean id="weatherJobSaveDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="weatherJob"/>
		</property>
		<property name="targetMethod">
			<value>saveCityWeather</value>
		</property>
	</bean>
	<!-- 天气任务  deletejson任务-->
<!-- 	<bean id="weatherJobDeleteDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> -->
<!-- 		<property name="targetObject"> -->
<!-- 			<ref bean="weatherJob"/> -->
<!-- 		</property> -->
<!-- 		<property name="targetMethod"> -->
<!-- 			<value>saveCityWeather</value> -->
<!-- 		</property> -->
<!-- 	</bean> -->
	
	
	<!-- 定义trigger -->
	 <bean id="sysPwdTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 -->  
        <property name="jobDetail">  
            <ref bean="sysPwdJobDetail" />  
        </property>  
<!--         	每天凌晨12点执行一次 -->
        <property name="cronExpression">  
            <value>0 0 0 * * ?</value>
        </property>  
    </bean>  
     <bean id="servicePwdTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 -->  
        <property name="jobDetail">  
            <ref bean="servicePwdJobDetail" />  
        </property>  
<!--         	每天凌晨12点执行一次 -->
        <property name="cronExpression">  
            <value>0 0 0 * * ?</value>
        </property>  
    </bean> 
     <bean id="carBindTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 -->  
        <property name="jobDetail">  
            <ref bean="carBindJobDetail" />  
        </property>  
<!--         	每天凌晨12点执行一次 -->
        <property name="cronExpression">  
            <value>0 0 0 * * ?</value>
        </property>  
    </bean> 
    
    <!-- 天气json定时 触发-->
    <bean id="weatherTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    	<property name="jobDetail">
    		<ref bean="weatherJobSaveDetail"/>
    	</property>
    	<property name="cronExpression">
    		 <value>0 0 0 * * ?</value>
    	</property>
    </bean>
    
    <!-- 触发器工厂,将所有的定时任务都注入工厂-->  
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no" lazy-init="false">  
        <!-- 添加触发器 -->  
        <property name="triggers">  
            <list>  
                <!-- 将上面定义的测试定时任务注入(可以定义多个定时任务,同时注入)-->  
                <ref local="sysPwdTrigger" />  
                <ref local="servicePwdTrigger" />  
                <ref local="carBindTrigger" />  
                <ref local="weatherTrigger"/>
            </list>  
        </property>  
    </bean>  
    <!-- 定时任务 结束 -->  
	
	<bean id="quartzTaskService" class="com.chinaGPS.driverBook.service.impl.QuartzTaskService" scope="prototype">
		<property name="schedulerFactory" ref="schedulerFactory"></property>
		<property name="scheduleDao" ref="scheduleDao"></property>
	</bean>
</beans>  

 

 以上是spring 配置调用。。。。。。。。。。。

 

编程调用时,可以对某个任务设置多个触发时间任务,任务执行的规则来自数据库。。。。。。。。

xml配置就很难做到这一点。。。。。。

分享到:
评论
1 楼 分开旅行 2012-04-10  
不错,收藏之!

相关推荐

    quartz定时任务调度

    Quartz定时任务调度是Java平台上广泛使用的开源作业调度框架,它允许开发者定义并执行复杂的调度任务,例如定期执行某些业务逻辑或系统维护操作。在基于Web的开发环境中,Quartz可以很好地集成到Spring等框架中,...

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    Quartz定时任务调度1

    Quartz定时任务调度是Java开发中常用的一种任务调度框架,它允许开发者定义任务(JobDetail)和触发器(Trigger),以便在指定的时间点执行特定的任务。以下是对Quartz核心概念的详细说明: 1. **Scheduler**:...

    Spring quartz 定时任务调度

    Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度灵活的调度功能,使得开发者可以轻松地定义和控制任务的执行时间。在"Quartz.net作业调度自定义定时执行任务多任务执行...

    ASP.NET使用Quartz.NET实现定时任务调度

    结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...

    C# 控制台Quartz定时任务.doc

    【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...

    java quartz 定时任务

    Java Quartz 是一个强大的开源任务调度库,用于在Java应用程序中创建和管理定时任务。Quartz 提供了丰富的API,使得开发者能够灵活地定义任务,并精确控制任务的执行时间。本项目利用Quartz 实现了基于Cron表达式的...

    Quartz定时任务表达式

    ### Quartz定时任务表达式详解 在探讨Quartz定时任务表达式的使用之前,我们先了解下Quartz是什么。Quartz是一个开源的作业调度框架,能够触发在指定时间运行的任务,广泛应用于Java应用程序中进行定时任务的管理。...

    定时任务quartz实现分组串行并行动态配置

    Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...

    Java使用quartz实现任务调度定时任务

    本篇文章将深入探讨如何使用Quartz在Java应用程序中实现任务调度。 Quartz库提供了一个灵活的API,可以创建、调度和管理任务,这些任务被称为Job。每个Job都与一个Trigger关联,Trigger定义了何时启动Job。在Java...

    Quartz定时任务常用的11张数据库脚本表结构

    这里我们将详细探讨Quartz定时任务在数据库中的11张核心表结构。 1. **QRTZ_JOB_DETAILS**:此表存储所有Job的详细信息,如Job类名、Job数据映射等。每个Job实例在此表中对应一条记录,Job的唯一标识由`SCHED_NAME`...

    利用Quartz实现任务调度的集群

    【Quartz任务调度集群】是Java开发中解决定时任务需求的一种高效方案,它由OpenSymphony团队开发,自2001年以来广泛应用于各种项目。Quartz的核心优势在于其灵活性和简单性,允许开发者自由定义任务触发的时间表,...

    SpringBoot 整合Quartz(集群)实现定时任务调度

    SpringBoot整合Quartz实现定时任务调度是企业级应用中常见的需求,主要用于自动化执行某些周期性的任务,例如数据备份、报表生成、系统维护等。Quartz是一个功能强大的开源作业调度框架,能够灵活地定义任务和调度...

    Quartz定时任务框架

    总之,Quartz定时任务框架为Java开发者提供了一套灵活且功能强大的任务调度解决方案。通过理解其核心组件和API,我们可以方便地创建和管理各种定时任务,以满足各种业务需求。在这个简单的示例中,我们看到了如何每...

    C# Quartz.Net定时任务操作明细、完整过程

    【C# Quartz.Net定时任务操作】Quartz.Net是一款强大的任务调度框架,广泛应用于C#环境下的定时任务管理。本文将详细介绍如何使用Quartz.Net进行定时任务的配置与执行。 首先,**通过Nuget安装框架**非常简单,只需...

    java定时任务调度

    在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring框架的`@Scheduled`注解以及Quartz库。 1. **Java内置的`java.util.Timer`和`TimerTask`**: - `Timer`类用于创建一...

    Quartz定时任务图形界面的系统

    Quartz定时任务图形界面系统是一种基于Java开发的高级任务调度平台,它允许开发者安排和管理应用程序中的各种任务执行。在本系统中,Quartz与其他流行的技术框架如SpringMVC、MyBatis、Thymeleaf和Bootstrap3进行了...

Global site tag (gtag.js) - Google Analytics