`
jayluns
  • 浏览: 145958 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring Quartz 调度与Jdk Timer

    博客分类:
  • J2EE
阅读更多
,最近经历的几个项目大多里面都使用到Spring Quartz,及JDKTimer 去实现任务调度的一些功能(比比如说,检查每天定时检查订单是否发送成功,或者每天具体的某个时间点根据当前的时间去更新一些状态值等等),在此贴点代码出来。
一 Quartz MethodInvokingJobDetailFactoryBean:
(使用MethodInvokingJobDetailFactoryBean的好处就是 你能够不用编写一个单独的TimerTask或QuartzJobBean类就可以调度单次方法调用)

1 代码简要如下就可以实现:UpdateAgentContractStatusJob.java

package com.kingdee.ais.ibmp.business.task;

import java.util.Date;

import org.apache.log4j.Logger;
import com.kingdee.ais.ibmp.business.advert.service.AdvAgentContractService;

/**
 *  task类,针对(MethodInvokingJobDetailFactoryBean這种bean)
 * @author yong_jiang
 *
 */

public class UpdateAgentContractStatusJob{
	
	
	private static Logger log = Logger.getLogger(UpdateAgentContractStatusJob.class);
	
	private AdvAgentContractService advAgentContractService;
	
	public AdvAgentContractService getAdvAgentContractService() {
		return advAgentContractService;
	}

	public void setAdvAgentContractService(
			AdvAgentContractService advAgentContractService) {
		this.advAgentContractService = advAgentContractService;
	}
	
	public void run(){
		
		long p1 = System.currentTimeMillis();
		log.info("updatestatus task start......"+new Date());
		
		/**
		 * 执行顺序 1 initOverriteDates(),2 updateforContractStaus(),3 updateforContractStaus;
		 */
			boolean res1=advAgentContractService.initOverriteDates();
			boolean res2=advAgentContractService.updateforContractStaus();
			boolean res3=advAgentContractService.updateforContractStaus2();
			System.out.println(res1);
			System.out.println(res2);
			System.out.println(res3);
			log.info("updatestatus task end...."+new Date());
			System.out.println("本轮调度时间:"+(System.currentTimeMillis() - p1));

		
		
	}

}


2 配置文件 sb-daemontask-context.xml

<?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: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-2.0.xsd             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    
	<!-- 声明调度的Job-->
    <bean id="quartzJob" class="com.kingdee.ais.ibmp.business.task.UpdateAgentContractStatusJob">
  		<property name="advAgentContractService" ref="advAgentContractService" />
    </bean>
    
    <bean id="updateAgentContractStatusjobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="quartzJob"/>
        </property>
        <property name="targetMethod"><value>run</value> </property>
       
    </bean>
    
    <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="updateAgentContractStatusjobtask"/>
        </property>
        <!-- 在每天中午12点触发 -->
        <property name="cronExpression">
        	<value>0 27 10 * * ? *</value>
			</property>
    </bean>
    
    <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
    <bean id="startQuertz" lazy-init="true" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <!--可以加入多个调度 -->
            <list>
                <ref bean="doTime"/>
            </list>
        </property>
    </bean>
    
    
</beans>




二:JDK Timer任务调度, 使用jDK TIMER对象,你可以创建定制的timer或者调用某些方法的timer,包装的timer的工作由TimerFactoryBean完成
package com.gpdi.infores.rc.task;

import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.gpdi.infores.global.client.GlobalVars;

public class OnlineUserSynTask extends TimerTask {
	
	private static final Log LOG = LogFactory.getLog(OnlineUserSynTask.class);
	/**
	 * 定时任务是否开始工作,解决IDE拖Swing界面时自动把定时任务拉起来 而影响开发效率。
	 */
	private static boolean isStartWork = false;
	@Override
	public void run() {		
		if(!isStartWork) 
		{
			return;
		}
		LOG.debug("开始执行定时任务:OnlineUserSynTask");		 	
		try
		{
			//添加用户
			GlobalVars.getInstance().addUpdateOnlineUser();
			//检查版本
			ClientVerCheck.getInstance().checkVersion();
			//接收公告
			BulletinIncept.getInstance().incept();
		}catch(Exception ex)
		{
			LOG.error(ex.getMessage());
		};		
		LOG.debug("退出定时任务:OnlineUserSynTask");
	}
	public static void setStartWork(boolean isStartWork) {
		OnlineUserSynTask.isStartWork = isStartWork;
	}

}



 <bean id="onlineUserSynTask"class="com.gpdi.infores.rc.task.OnlineUserSynTask" />
    
	<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
	   <property name="timerTask" ref="onlineUserSynTask" />
	   每600000运行一次;
	   <property name="period">
	       <value>600000</value>
	   </property>
	   开启服务之后,延迟60000start
	   <property name="delay">
	       <value>60000</value>
	   </property>
	</bean>
	
	//最好使用TimerFactoryBean来设置任务
	<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
		<property name="scheduledTimerTasks">
		   <list><ref bean="scheduleReportTask"/></list>		   
		</property>
	</bean>	



三 quartz与maven 集成:

<dependency>
	<groupId>org.quartz-scheduler</groupId>
	<artifactId>quartz</artifactId>
          <version>1.8.4</version>
	 </dependency>


	  <org.quartz-scheduler>1.8.4</org.quartz-scheduler>

           <dependency>
		<groupId>org.quartz-scheduler</groupId>
		<artifactId>quartz</artifactId>
		<version>${org.quartz-scheduler}</version>
	</dependency>


1
0
分享到:
评论

相关推荐

    spring timer、quartz俩种任务调度

    总的来说,`Spring Timer`适合简单的定时任务需求,而`Quartz Scheduler`更适合处理大型项目或需要高级调度功能的场景。在实际应用中,开发者可以根据项目需求选择合适的任务调度器。通过`spring-taskScheduling`这...

    spring quartz相关jar包(多版本)

    2. `spring-context-support.jar`: 提供对任务调度的支持,包括 Quartz 和 JDK 的 Timer。 3. `spring-aop.jar`: 实现 AOP 功能,可以用来定义切面和通知,适用于事务管理等。 4. `quartz.jar`: Quartz 框架的核心库...

    spring + jdk TimerTask定时器

    // 使用JDK的Timer调度任务 } } ``` ### 触发策略 在Spring中,你可以通过`Trigger`来决定任务何时触发。虽然Spring不直接支持`TimerTask`的触发,但可以自定义一个`Trigger`实现来模拟`TimerTask`的行为。 ```...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    最后,启动Quartz调度器`scheduler.start()`,这样`DailySay`作业就会按照设定的cron表达式开始执行。 Quartz还支持集群和持久化,这意味着多个Quartz实例可以在分布式环境中协作调度任务,而且任务的状态和计划...

    Spring 任务调度

    总结来说,Spring的任务调度通过集成JDK的Timer或更高级的Quartz库,为开发者提供了灵活且强大的后台任务执行能力。无论是简单的定时任务还是复杂的调度需求,都能得到很好的满足。在设计和实现任务调度时,需要注意...

    spring+jdk定时器

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与JDK定时器结合以及集成第三方库如Quartz的方式,来实现定时任务。本篇文章将详细探讨“spring+jdk定时器”的实现方式。 首先,我们来看JDK自带的定时器——`...

    Spring3.0作业调度

    在Spring 2.x版本中,Spring已经提供了对`Timer`和Quartz的集成支持,通过`FactoryBean`进行配置,还包含线程池调度的抽象类,隐藏了底层实现细节。然而,Spring 3.0引入了新的【新特性】,包括声明式模型验证、全面...

    任务调度开源框架Quartz动态添加、修改和删除定时任务

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。...Quartz在功能上远远超越了JDK自带的Timer,很好很强大!

    spring2 计划任务

    Spring提供了一个接口`org.springframework.scheduling.quartz.SchedulerFactoryBean`,用于配置和启动Quartz调度器。 2. **基于Java的Timer和TimerTask**:虽然Spring更推荐使用Quartz,但同时它也支持使用JDK自带...

    Spring排程(Scheduling)技术

    从简单的JDK Timer到复杂的Quartz调度器,Spring都能够很好地支持。在选择合适的排程方案时,需要考虑任务的复杂性、灵活性以及对性能的要求。在实际开发中,可以根据项目需求选择最适合的排程实现方式。

    spring定时计划讲义

    Spring提供了多种任务调度方案,其中包括对JDK内置的Timer的支持以及与流行的任务调度库Quartz的集成。 任务调度简介: 在软件开发中,任务调度是用于自动化执行特定任务的重要机制。这些任务通常包括但不限于数据...

    Quartz_Job+Scheduling_Framework

    当初公司一个项目中有些定时候任务,原来是用 JDK 的 TaskTimer 来实现的,个人觉得比较笨拙--未能跳开节假日,也不能依 赖于其他的业务操作灵活安排计划。于是想起了 Spring 框架整合了一个作业调度框架 Quartz,...

    深入理解Java定时调度(Timer)机制

    7. quartz和Spring Schedule:quartz和Spring Schedule是Java中两种常用的定时调度框架。它们提供了更加复杂的定时调度功能,可以满足复杂的业务需求。 8. Timer机制的优缺点:Timer机制的优点是简单易用、线程安全...

    Spring+3.x企业应用开发实战光盘源码(全)

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:对...

    spring 定时任务配置详解

    Spring 框架提供了对定时调度服务的内置支持类,支持从 JDK 1.3 开始内置的 Timer 类和 Quartz Scheduler。开发者可以通过 FactoryBean,分别指向 Timer 或 Trigger 实例的引用进行配置。同时,Spring 还包含有用于...

    spring定时器相关资料

    它允许开发者在应用中安排周期性任务的执行,无需直接依赖底层的调度实现,如 Quartz 或者 JDK 的 Timer。接下来,我们将深入探讨Spring定时器的相关知识点。 一、Spring定时器基础 1. **TaskExecutor接口**:这是...

    Spring.3.x企业应用开发实战(完整版).part2

    13.4.2 Spring对JDK Timer的支持 13.5 Spring对JDK 5.0 Executor的支持 13.5.1 了解JDK 5.0的Executor 13.5.2 Spring对Executor所提供的抽象 13.6 实际应用中的任务调度 13.6.1 如何产生任务 13.6.2 任务调度对应用...

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被通知对象 7.9. 使用“自动代理...

    陈开雄 Spring+3.x企业应用开发实战光盘源码.zip

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:...

Global site tag (gtag.js) - Google Analytics