,最近经历的几个项目大多里面都使用到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 665春节期间,无意中看到 ... -
Dubbo与Zookeeper、SpringMVC整合
2016-03-18 16:31 835互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构 ... -
TCP/IP,http,socket,长连接,短连接
2016-03-18 16:22 774TCP/IP TCP/IP是个协议组,可分为三个层次:网络层 ... -
移动互联网App客户端服务端通信安全问题。
2016-01-20 12:13 1588作为一个移动互联网App,天生是需要和服务器通信的。那么,服 ... -
前后端分离开发部署模式
2015-12-12 11:10 9762这周着手开始重新构 ... -
Jenkins + Git + Maven + tomcat集成环境(转)
2015-11-07 11:01 12547折腾了好几天,终于吧Jenkins + Git ... -
Apache Commons(转)
2012-08-31 11:36 805Apache Commons包含了很多开源的工具,用于解决平时 ... -
Cron 常用表达式
2012-08-31 11:34 2903Cron 常用表达式 <SELECT NAME=&qu ... -
httpSession的正确理解
2012-07-20 12:43 822httpSession的正确理解 ... -
利用Session防止表单重复提交
2012-07-20 10:01 3053为什么需要防止表单重复提交呢? 重复提交不仅仅是验证的问题 ... -
图片码
2012-05-08 11:34 1199直接切入主题,2年前写的一个图片码,记录一下。 1 生成图片 ... -
jnlp
2012-05-08 10:59 4460java提供的一种让你可以通过浏览器直接执行java应用程序的 ... -
Dozer 深层次复制
2012-05-07 15:04 7859最近在做项目上遇到了 ... -
使用FreeMarker生成java代码
2012-05-07 14:36 36491 编写ftl模版; 2 编写java生成类(主要用来设置好 ...
相关推荐
实现了spring配置比较流行的任务调度操作,java timer 和 quartz俩种方式 并且有注释描述。
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。...Quartz在功能上远远超越了JDK自带的Timer,很好很强大!
当初公司一个项目中有些定时候任务,原来是用 JDK 的 TaskTimer 来实现的,个人觉得比较笨拙--未能跳开节假日,也不能依 赖于其他的业务操作灵活安排计划。于是想起了 Spring 框架整合了一个作业调度框架 Quartz,...
第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。 第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。 第15章:对...
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 任务调度对应用...
第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。 第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。 第15章:...
17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...
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. 使用“自动代理...
当初公司一个项目中有些定时候任务,原来是用 JDK 的 TaskTimer 来实现的,个人觉得比较笨拙--未能跳开节假日,也不能依赖于其他的业务操作灵活安排计划。于是想起了 Spring 框架整合了一个作业调度框架 Quartz,...
7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”通知器 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被通知对象 7.9. 使用“自动...
17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...
7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”通知器 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被通知对象 7.9. 使用“自动...