前言
Quartz介绍
Spring整合Quartz的RAM方式
1. 在项目中加入Quartz相关jar包
Spring.jar
quartz-all-1.8.6.jar
quartz-oracle-1.8.6.jar(如果是Oracle请加入这个jar包)
quartz-weblogic-1.8.6.jar(如果中间件使用的weblogic请加入这个jar包)
slf4j-api-1.5.6.jar
slf4j-log4j12-1.5.6.jar
2. 增加spring-time.xml配置文件
内容如下
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEbeansPUBLIC"-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<!-- 调度器lazy-init='false'那么容器启动就会执行调度程序 --> <beanid="startQuertz"lazy-init="false"autowire="no"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <propertyname="triggers"> <list> <refbean="doTime"/> </list> </property> <!-- 允许在Quartz上下文中使用Spring实例工厂 --> <propertyname="applicationContextSchedulerContextKey"value="applicationContext"/> </bean>
<!-- 触发器 --> <beanid="doTime"class="org.springframework.scheduling.quartz.CronTriggerBean"> <propertyname="jobDetail"ref="jobtask"></property> <!-- cron表达式 --> <propertyname="cronExpression"value="10,15,20,25,30,35,40,45,50,55 * * * * ?"></property> </bean>
<!-- 任务 --> <beanid="jobtask"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <propertyname="targetObject"ref="synUsersJob"></property> <propertyname="targetMethod"value="execute"></property> </bean>
<!-- 要调用的工作类 --> <beanid="synUsersJob"class="org.leopard.core.quartz.job.SynUsersJob"></bean>
</beans>
|
Quartz的核心就是这个xml的配置
任务:jobtask定义了我们需要执行的定时任务类以及要执行的方法
触发器:doTime定义了任务需要什么时候执行(一个触发器关联一个job)
调度器:startQuertz负责加载任务和触发器
3. 在web.xml中增加我们刚刚加入的spring-time.xml文件
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:config/datasource.xml, classpath:config/spring/spring-common.xml, classpath:config/spring/spring-dao.xml, classpath:config/spring/spring-service.xml, classpath:config/spring/spring-time.xml </param-value> </context-param> |
4. 增加我们需要执行的定时任务bean,内容如下
package org.leopard.core.quartz.job;
/** * 同步用户定时任务 * @author Administrator * */ public class SynUsersJob {
public void execute() { System.out.println("定时任务执行"); }
} |
ok,配置完成我们启动项目,看到如下输入内容证明我们的项目加入定时任务成功了
项目加入Quartz的RAM方式配置是最简单的,只需要这几步,我们就给我们的项目增加了定时调度的功能。
接下来会给大家讲一下Quartz的DataBase方式和Quartz的集群...
注意问题
问题一:spring核心包版本问题,替换下spring.jar为官方最新的就可以了
14:46:20,003 ERROR JobRunShell:232 - Job DEFAULT.jobtask threw an unhandled Exception: java.lang.NoClassDefFoundError: org/springframework/beans/PropertyAccessorFactory at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:77) at org.quartz.core.JobRunShell.run(JobRunShell.java:223) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) |