在Spring中,使用JDK的Timer类库来做任务调度功能不是很方便,关键它不可以象cron服务那样可以指定具体年、月、日、时和分的时间。你只能将时间通过换算成微秒后传给它。如任务是每天执行一次,则需要在spring中如下配置:
­
<bean id="scheduledTask" class= "org.springframework.scheduling.timer.ScheduledTimerTask">
<!--程序启动后开始执行任务的延迟时间 -->
<property name="delay" value="0" />
<!--每隔一天【一天=24×60×60×1000微秒】执行一次-->
<property name="period" value="86400000" />
<!--业务统计报表bean -->
<property name="timerTask" ref="businessReport" />
</bean>
­
其中period就是一天的微秒数。如果每月1日运行一次,那就复杂了,不知如何配置。因为月份有大、小月之分,每月的微秒数都不一样。
­
而Quartz类库不但有着上述JDK的Timer类库类似的配置,更重要的,它还有着类似于unix的cron服务的配置。因此,在迁移中我们采用了Quartz类库的接口。
具体的步骤如下:
1 编写业务类,该类继承了org.quartz.Job,主要的逻辑在execute方法中编写
2 配置spring的applicationContext.xml文件
2.1 配置任务JobDetailBean
2.2配置触发器 CronTriggerBean
2.3配置调度器  SchedulerFactoryBean
3 所需要的jar包:
spring.jar,quartz.jar,commons-logging-1.0.4.jar,commons-dbcp-1.2.2.jar,commons-pool-1.3.jar
4 把quartz.properties放到类路径下
以下为一个demo
业务类:
Java代码  
  1. package task;
  2. import java.util.Date;
  3. import org.quartz.JobExecutionContext;
  4. import org.quartz.JobExecutionException;
  5. public class BusinessReport implements org.quartz.Job{
  6. public void perform(){ //执行报表统计入口函数
  7. //业务逻辑
  8. System.out.println("开始执行报表的业务逻辑了----现在的时间是--"+new Date());
  9. }
  10. public void execute(JobExecutionContext arg0) throws JobExecutionException {
  11. perform();
  12. }
  13. }
  14. applicationContext.xml文件
  15. <?xml version="1.0" encoding="UTF-8"?>
  16. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  17. <!--
  18. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ":/spring-beans.dtd">
  19. -->
  20. <beans>
  21. <bean id="businessReport" class="task.BusinessReport" />
  22. <bean name="reportTask"
  23. class="org.springframework.scheduling.quartz.JobDetailBean">
  24. <property name="jobClass" value="task.BusinessReport" />
  25. </bean>
  26. <!-- 触发器 -->
  27. <bean id="cronTrigger"
  28. class="org.springframework.scheduling.quartz.CronTriggerBean">
  29. <!-- 指向我们的任务 -->
  30. <property name="jobDetail" ref="reportTask" />
  31. <!--  每天下午16点50分到55分,每分钟运行一次 -->
  32. <property name="cronExpression" value="0 50-55 16 * * ?" />
  33. </bean>
  34. <!-- 调度器  -->
  35. <bean
  36. class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  37. <property name="triggers">
  38. <list>
  39. <!--  触发器列表 -->
  40. <ref bean="cronTrigger" />
  41. </list>
  42. </property>
  43. <property name="configLocation" value="classpath:quartz.properties" />
  44. </bean>
  45. </beans>
三 quartz.properties文件的内容(默认放在类路径下)
#============================================================================
# Configure Main Scheduler Properties 
#============================================================================
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

#============================================================================
# Configure ThreadPool 
#============================================================================
#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#============================================================================
# Configure JobStore 
#============================================================================
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.misfireThreshold = 60000
#org.quartz.jobStore.useProperties = false
#org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.dataSource = myDS

#org.quartz.jobStore.isClustered = true
#org.quartz.jobStore.clusterCheckinInterval = 15000

#============================================================================
# Configure DataSource
#============================================================================
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost/test
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password = root
org.quartz.dataSource.myDS.maxConnections = 10

附:cronExpression表达式解释:
0 0 12 * * ?---------------在每天中午12:00触发
0 15 10 ? * *---------------每天上午10:15 触发
0 15 10 * * ?---------------每天上午10:15 触发
0 15 10 * * ? *---------------每天上午10:15 触发
0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 触发
0 * 14 * * ?---------------每天在下午2:00至2:59之间每分钟触发一次
0 0/5 14 * * ?---------------每天在下午2:00至2:59之间每5分钟触发一次
0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次
0 0-5 14 * * ?---------------每天在下午2:00至2:05之间每分钟触发一次
0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44时触发
0 15 10 ? * MON-FRI---------------从星期一至星期五的每天上午10:15触发
0 15 10 15 * ?---------------在每个月的每15天的上午10:15触发
0 15 10 L * ?---------------在每个月的最后一天的上午10:15触发
0 15 10 ? * 6L---------------在每个月的最后一个星期五的上午10:15触发
0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发
0 15 10 ? * 6#3---------------在每个月的第三个星期五的上午10:15触发
0 0 12 1/5 * ?---------------从每月的第一天起每过5天的中午12:00时触发
0 11 11 11 11 ?---------------在每个11月11日的上午11:11时触发.­

Quartz+spring列子相关推荐

  1. quartz+spring框架动态调整频率实践

    2019独角兽企业重金招聘Python工程师标准>>> spring环境: <?xml version="1.0" encoding="UTF-8 ...

  2. Quartz + spring 定时任务常见错误总结

    1.配了下spring-biz.xml,总是报错, org.springframework.beans.factory.BeanCreationException: Error creating be ...

  3. Quartz+Spring 自定义作业调度(作业在DB中配置)

    为什么80%的码农都做不了架构师?>>>    Quartz版本为1.8.3 Spring版本为2.5 自定义作业表 QRTZ_JOB. 其中定义 作业标识.作业名称.类名.触发器名 ...

  4. Quartz——Spring定时任务配置

    刚来公司,听说用到了很多的定时任务,于是自己偷偷实现了一个小例子,感觉还不错.万一哪天交给我一个定时任务也好直接上手敲代码呀. 配置步骤 Spring的定时任务配置分为三个步骤: 1.定义任务 2.任 ...

  5. 1、spring+quartz关闭Tomcat出现异常

    2019独角兽企业重金招聘Python工程师标准>>> quartz + spring做定时任务的时候 , tomcat8重启/关闭服务出现如下异常: appears to have ...

  6. quartz的job类无法保留本身通过spring注入的属性问题

    现在有一个应用需要定时做一些动作,使用的是quartz+spring,但是没有使用spring实现的quartz,这里发现了一个问题,就是通过spring注入进来的bean用于做为quartz的job ...

  7. 解决Spring中使用quartz发生NotSerializableException methodInvoker的问题

    Spring2.5 + quartz1.6.5 发生如下异常 Caused by: org.quartz.JobPersistenceException: Couldn't store job: Un ...

  8. Spring之——quartz集群(Oracle数据源)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/49128155 在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 q ...

  9. quartz在集群环境下的最终解决方案

    在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB . 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVI ...

最新文章

  1. 普华永道报告:区块链不只是比特币!将改变这8大领域|附下载
  2. mRemoteNG 远程连接工具(开源)
  3. 2019-04(2)Python学习
  4. 《数据整理实践指南》一第1章 从头说起:什么是噪音数据
  5. ios12彻底关闭siri_Siri正在iOS 12中获取自定义语音操作
  6. python实现队列_Python学习教程:用队列实现栈
  7. 海外仓储系统有哪些功能?
  8. JS小项目 ----- 可视化冒泡排序
  9. C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem
  10. 谁在阻止RSS的普及??
  11. python 流程结构练习
  12. 数据结构——栈与队列的异同
  13. 神农班和我的2020年总结
  14. 宕机怎么读?服务器宕机是什么意思?
  15. Wox - 开源免费强大的快捷启动器辅助工具,快速高效率打开软件/搜索文件!
  16. apicloud——云编译失败
  17. 谨以此辞职信祭奠我的第一份工作
  18. 未分配利润与利润表不一致_资产负债表中的未分配利润和利润表中的净利润肯定是一致的吗?...
  19. 我希望用Java拥有的十大锡兰语言功能
  20. 规模指数介绍,如何使用Python获取数据

热门文章

  1. 真实孔径雷达——东方至远
  2. 分离数字——从左到右分离和从右到左分离
  3. 判断南红价值,“红“的等级是关键
  4. 2019秋招c++个人面经集合(包含cvte,bigo,老虎,网易,拼夕夕等)
  5. 2021.11.17
  6. unity中3dUI或者模型始终面向摄像机,跟随摄像机视角旋转丨视角跟随丨固定视角
  7. 如何从零开始学习3D视觉?
  8. 计算机启动时为啥总要检测硬盘,每次开机都磁盘检查怎么办_如何关闭硬盘开机自检-win7之家...
  9. 【论文笔记】Towards Privacy-Preserving Affect Recognition: A Two-Level Deep Learning Architecture
  10. 面对音乐行业解决音乐侵权严重痛点:启动数字化转型的设计思维工作坊