可以说是最好的一篇定时任务的介绍
来自:http://www.zuidaima.com/share/2736623139458048.htm
一.代码结构图
二.核心类
Job: 一个接口, 它里面只有一个方法void execute(),我们需要执行任务就需要实现这个接口,在execute中实现我们要做的事情。
JobDetail: 在Quartz每次执行Job时,都需要创建一个Job实例,所以它直接接受一个实现类以便运行时实例化,还需要一个描述信息,
JobDetail就是做这个事情。
Trigger: 是一个抽象类,描述触发执行的时间,它主要有SimpleTrigger和CronTrigger这两个子类,当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等。
Scheduler: 可以认为是quartz的调度器,我们把JobDetail和Trigger注册到Scheduler,由它调度运行。
三.各部分代码截图
1.applicationContext.xml
2.MyJob.java
四.spring与quartz集成版本问题
出现:Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class的原因是Spring 3.0版本中内置的Quartz版本是<2.0的,在使用最新的Quartz包(>2.0)之后,接口不兼容。
解决方法:
1.将<bean name="myJobtTask" class="org.springframework.scheduling.quartz.JobDetailBean">改为:
<bean name="myJobtTask" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
2.将<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">改为:
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
- /
- /springQuartz
- /springQuartz/.classpath
- /springQuartz/.project
- /springQuartz/.settings
- /springQuartz/.settings/org.eclipse.jdt.core.prefs
- /springQuartz/bin
- /springQuartz/bin/applicationContext.xml
- /springQuartz/bin/com
- /springQuartz/bin/com/zjt
- /springQuartz/bin/com/zjt/quartz
- /springQuartz/bin/com/zjt/quartz/MyJob.class
- /springQuartz/bin/com/zjt/quartz/Test.class
- /springQuartz/bin/com/zjt/quartz
- /springQuartz/bin/com/zjt
- /springQuartz/bin/com
- /springQuartz/bin/quartz.properties
- /springQuartz/bin/applicationContext.xml
- /springQuartz/lib
- /springQuartz/lib/commons-collections-3.2.1.jar
- /springQuartz/lib/commons-logging-1.1.3.jar
- /springQuartz/lib/jta-1.1.jar
- /springQuartz/.settings
- /springQuartz