,最近经历的几个项目大多里面都使用到Spring Quartz,及JDKTimer 去实现任务调度的一些功能(比比如说,检查每天定时检查订单是否发送成功,或者每天具体的某个时间点根据当前的时间去更新一些状态值等等),在此贴点代码出来。
二:JDK Timer任务调度, 使用jDK TIMER对象,你可以创建定制的timer或者调用某些方法的timer,包装的timer的工作由TimerFactoryBean完成
三 quartz与maven 集成:
一 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>
- quartz-1.8.4.jar (435.2 KB)
- 下载次数: 12
发表评论
-
12306模型设计探讨
2016-04-28 14:10 699春节期间,无意中看到 ... -
Dubbo与Zookeeper、SpringMVC整合
2016-03-18 16:31 867互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构 ... -
TCP/IP,http,socket,长连接,短连接
2016-03-18 16:22 811TCP/IP TCP/IP是个协议组,可分为三个层次:网络层 ... -
移动互联网App客户端服务端通信安全问题。
2016-01-20 12:13 1619作为一个移动互联网App,天生是需要和服务器通信的。那么,服 ... -
前后端分离开发部署模式
2015-12-12 11:10 9808这周着手开始重新构 ... -
Jenkins + Git + Maven + tomcat集成环境(转)
2015-11-07 11:01 12577折腾了好几天,终于吧Jenkins + Git ... -
Apache Commons(转)
2012-08-31 11:36 833Apache Commons包含了很多开源的工具,用于解决平时 ... -
Cron 常用表达式
2012-08-31 11:34 2942Cron 常用表达式 <SELECT NAME=&qu ... -
httpSession的正确理解
2012-07-20 12:43 853httpSession的正确理解 ... -
利用Session防止表单重复提交
2012-07-20 10:01 3091为什么需要防止表单重复提交呢? 重复提交不仅仅是验证的问题 ... -
图片码
2012-05-08 11:34 1251直接切入主题,2年前写的一个图片码,记录一下。 1 生成图片 ... -
jnlp
2012-05-08 10:59 4509java提供的一种让你可以通过浏览器直接执行java应用程序的 ... -
Dozer 深层次复制
2012-05-07 15:04 7895最近在做项目上遇到了 ... -
使用FreeMarker生成java代码
2012-05-07 14:36 36831 编写ftl模版; 2 编写java生成类(主要用来设置好 ...
相关推荐
总的来说,`Spring Timer`适合简单的定时任务需求,而`Quartz Scheduler`更适合处理大型项目或需要高级调度功能的场景。在实际应用中,开发者可以根据项目需求选择合适的任务调度器。通过`spring-taskScheduling`这...
2. `spring-context-support.jar`: 提供对任务调度的支持,包括 Quartz 和 JDK 的 Timer。 3. `spring-aop.jar`: 实现 AOP 功能,可以用来定义切面和通知,适用于事务管理等。 4. `quartz.jar`: Quartz 框架的核心库...
// 使用JDK的Timer调度任务 } } ``` ### 触发策略 在Spring中,你可以通过`Trigger`来决定任务何时触发。虽然Spring不直接支持`TimerTask`的触发,但可以自定义一个`Trigger`实现来模拟`TimerTask`的行为。 ```...
最后,启动Quartz调度器`scheduler.start()`,这样`DailySay`作业就会按照设定的cron表达式开始执行。 Quartz还支持集群和持久化,这意味着多个Quartz实例可以在分布式环境中协作调度任务,而且任务的状态和计划...
总结来说,Spring的任务调度通过集成JDK的Timer或更高级的Quartz库,为开发者提供了灵活且强大的后台任务执行能力。无论是简单的定时任务还是复杂的调度需求,都能得到很好的满足。在设计和实现任务调度时,需要注意...
Spring框架作为Java领域广泛使用的轻量级框架,提供了与JDK定时器结合以及集成第三方库如Quartz的方式,来实现定时任务。本篇文章将详细探讨“spring+jdk定时器”的实现方式。 首先,我们来看JDK自带的定时器——`...
在Spring 2.x版本中,Spring已经提供了对`Timer`和Quartz的集成支持,通过`FactoryBean`进行配置,还包含线程池调度的抽象类,隐藏了底层实现细节。然而,Spring 3.0引入了新的【新特性】,包括声明式模型验证、全面...
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。...Quartz在功能上远远超越了JDK自带的Timer,很好很强大!
Spring提供了一个接口`org.springframework.scheduling.quartz.SchedulerFactoryBean`,用于配置和启动Quartz调度器。 2. **基于Java的Timer和TimerTask**:虽然Spring更推荐使用Quartz,但同时它也支持使用JDK自带...
从简单的JDK Timer到复杂的Quartz调度器,Spring都能够很好地支持。在选择合适的排程方案时,需要考虑任务的复杂性、灵活性以及对性能的要求。在实际开发中,可以根据项目需求选择最适合的排程实现方式。
Spring提供了多种任务调度方案,其中包括对JDK内置的Timer的支持以及与流行的任务调度库Quartz的集成。 任务调度简介: 在软件开发中,任务调度是用于自动化执行特定任务的重要机制。这些任务通常包括但不限于数据...
当初公司一个项目中有些定时候任务,原来是用 JDK 的 TaskTimer 来实现的,个人觉得比较笨拙--未能跳开节假日,也不能依 赖于其他的业务操作灵活安排计划。于是想起了 Spring 框架整合了一个作业调度框架 Quartz,...
7. quartz和Spring Schedule:quartz和Spring Schedule是Java中两种常用的定时调度框架。它们提供了更加复杂的定时调度功能,可以满足复杂的业务需求。 8. Timer机制的优缺点:Timer机制的优点是简单易用、线程安全...
第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。 第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。 第15章:对...
Spring 框架提供了对定时调度服务的内置支持类,支持从 JDK 1.3 开始内置的 Timer 类和 Quartz Scheduler。开发者可以通过 FactoryBean,分别指向 Timer 或 Trigger 实例的引用进行配置。同时,Spring 还包含有用于...
它允许开发者在应用中安排周期性任务的执行,无需直接依赖底层的调度实现,如 Quartz 或者 JDK 的 Timer。接下来,我们将深入探讨Spring定时器的相关知识点。 一、Spring定时器基础 1. **TaskExecutor接口**:这是...
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 任务调度对应用...
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. 使用“自动代理...
第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。 第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。 第15章:...