Quartz是一个开放源码项目,专注于任务调度器。
springMVC 具体的搭建框架就不具体说明,接下来直接描述把Quartz集成到springMVC 框架中。
步骤:
1.引入所需要的jar包
2.新建要定时做的事情的具体实现类和方法,这边可以实现多个类和方法,只要spring-quartz.xml文件中配置任务几个并对应的实现类和方法。
public class DataButtServiceImpl { public void run() { //定时要做的事情的具体实现 } }
2.新建一个spring-quartz.xml文件放在跟springMVC 的配置文件同级目录就可以了,spring-quartz.xml可以配置多个任务,列如quartzJobA、quartzJobB,并配置对应的方法和时间表达式(什么时间执行)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 要调用的工作类 --> <bean id="quartzJobA" class="cn.handle.data.impl.DataButtServiceImpl"/> <!-- 定义调用对象和调用对象的方法A --> <bean id="jobtaskA" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 调用的类 --> <property name="targetObject"> <ref bean="quartzJobA"/> </property> <!-- 调用类中的方法 --> <property name="targetMethod"> <value>run</value> </property> </bean> <!-- 要调用的工作类 <bean id="quartzJobB" class="cn.EventProviderServiceImpl"/>--> <!-- 定义调用对象和调用对象的方法B <bean id="jobtaskB" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="quartzJobB"/> </property> <property name="targetMethod"> <value>run</value> </property> </bean>--> <!-- 定义触发时间A --> <bean id="doTimeA" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="jobtaskA"/> </property> <property name="cronExpression"> <value>0 0/1 * * * ?</value> </property> </bean> <!-- 定义触发时间B <bean id="doTimeB" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="jobtaskB"/> </property> <property name="cronExpression"> <value>0 * * * * ?</value> </property> </bean>--> <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 --> <bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="doTimeA"/> <!-- <ref bean="doTimeB"/> --> </list> </property> </bean> </beans>
cronExpression值有几种如下:
"0 0 12 * * ?" 每天中午12点触发
"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点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和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年至2005年的每月的最后一个星期五上午10:15触发
2.在web.xml中描述启动时要读spring-quartz.xml这个文件并解析
总结:
这样的集成存在几个缺点:
1.我们能不能在页面上进行管理JOB。
2.不能支持持久化任务,集群和分布式任务。
接下去讲另外一个集成,针对上面总结的改进。