(七)sping之定时任务Quartz
来源:互联网 发布:淘宝合并付款没有代付 编辑:程序博客网 时间:2024/05/29 09:24
实际项目中有关定时任务的使用还是比较普遍的,比如定时做报表,定时取数据,定时发送邮件等等,不过我们熟悉的并且比较方便的要么就是TimerTask要么就是Quartz,不过要按方便来讲和使用率来讲,大家还是普遍愿意在实际项目中使用更优秀的Quartz,尤其是和Spring配合起来十分方便,不过TimerTask也可以配置在Spring中
首先还是讲Quartz吧,之前大家都知道在不需要框架的项目中,我们的定时任务通常将执行代码写入到servlet的init方法中,然后在web.xml中配置
- <span style="font-size: medium;"><servlet>
- <servlet-name>Init</servlet-name>
- <servlet-class>
- com.cn.util.timer.TestTimerTaskServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet></span>
这样的代码,只要服务器一直在开启状态,就会按时执行任务的
一般来说Quart中有几个比教重要的概念:定时任务,触发器Trigger,调度器Scheduler,并且定时任务需要传入一个具体执行任务的类,这个类必须继承import org.quartz.Job这个类,并且实现execute这个方法,至于execute方法里面就是功能代码了,就是上面提到的统计报表,获取数据,发送邮件之类的事情了,欲了解更多的在Java中使用Quartz的知识请参考我很久以前写的有关Quartz的文章。
Spring和Quartz的整合
必须包
首先说一种不必继承任何类的具体定时任务的执行类JobTask.java
- <span style="font-size: medium;">package com.javacrazyer.comon;
- public class JobTask {
- public void doJob(){
- System.out.println("执行发送邮件的程序...");
- }
- }
- </span>
那么这个具体实现功能的类就没有继承任何其他第三方类
Spring的配置文件applicationContext.xml具体配置
- <span style="font-size: medium;"><?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.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <bean id="jobTask" class="com.javacrazyer.comon.JobTask"></bean>
- <!-- 定义JobDetail 具体的要执行的目标BEAN和执行的目标方法-->
- <bean id="jobDetail"
- class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <!--引用实际目标bean-->
- <property name="targetObject" ref="jobTask" />
- <!--目标bean中的目标方法:doJob方法,意思为将来执行定时任务就是该bean中的doJob方法-->
- <property name="targetMethod" value="doJob" />
- </bean>
- <!-- 使用triggers和SchedulerFactoryBean来包装任务 -->
- <!--定义触发的时间-->
- <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="jobDetail" />
- <!-- cron表达式 秒 分 时 日 月 周 (年) -->
- <property name="cronExpression" value="0/15 * * * * ?" />
- </bean>
- <!-- 管理触发器,就相当于在java中使用Quartz代码中的调度器scheduler -->
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="cronTrigger" />
- </list>
- </property>
- </bean>
- </beans>
- </span>
有关cron表达式的的我之前的文章介绍过
大家发现没有JobDetail 那里配置指明了类,还必须指明具体要执行的方法,具体原因是MethodInvokingJobDetailFactoryBean这个类配置里面必须要求同时配上类和方法,所以我之前的类就没有继承任何类。
那么,如果有人懒得配置方法的话,还想按Quartz正常道路来走的话,那么具体执行类要变化了
- <span style="font-size: medium;">package com.javacrazyer.comon;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- import org.springframework.scheduling.quartz.QuartzJobBean;
- public class JobTask extends QuartzJobBean{
- @Override
- protected void executeInternal(JobExecutionContext arg0)
- throws JobExecutionException {
- System.out.println("执行发送邮件的程序...");
- }
- }
- </span>
并且spring配置中个JobDetail那个bean的整体换成
- <span style="font-size: medium;"><bean id="jobDetail"
- class="org.springframework.scheduling.quartz.JobDetailBean">
- <property name="jobClass">
- <value>com.javacrazyer.comon.JobTask</value>
- </property>
- </bean> </span>
像这样两种方式的都可以进行执行了,根据个人喜好,想选哪个都可以
web.xml大家再熟悉不过了,还是写下吧
- <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <!-- Spring ApplicationContext Definition -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
- </span>
好了部署项目吧,启动tomcat吧,看看control控制台是不是每隔15秒就输出
执行发送邮件的程序...
差点忘记还有TimerTask跟Spring的结合的配置,需要一个实现的具体类
- <span style="font-size: medium;">package com.javacrazyer.comon;
- import java.util.TimerTask;
- public class EamilTask extends TimerTask{
- @Override
- public void run() {
- System.out.println("开始收取数据了.........");
- }
- }
- </span>
spring配置
- <span style="font-size: medium;"><?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.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <bean id="eamilTask" class="com.javacrazyer.comon.EamilTask" />
- <!-- 对定时器进行设置每隔30秒调用一次emailTask -->
- <bean id="springSchedule" class="org.springframework.scheduling.timer.ScheduledTimerTask">
- <property name="timerTask" ref="eamilTask"></property>
- <property name="period">
- <value>10000</value>
- </property>
- <property name="delay">
- <value>1000</value>
- </property>
- </bean>
- <!-- 启动定时器 -->
- <bean id="startTimeTask" class="org.springframework.scheduling.timer.TimerFactoryBean">
- <property name="scheduledTimerTasks">
- <list>
- <ref bean="springSchedule" />
- </list>
- </property>
- </bean>
- </beans>
- </span>
同样,启动服务器后,发现每隔10秒,执行下输出
开始收取数据了.........
- (七)sping之定时任务Quartz
- sping quartz定时任务的使用
- Quartz定时任务学习(七)Cron 触发器
- quartz(定时任务)
- spring定时任务的两种实现:1sping整合Quartz、 2sping-Task
- sping定时任务
- Sping配置定时任务
- Sping配置定时任务
- 定时执行任务之quartz
- Spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- spring定时任务之quartz
- Spring-定时任务之Quartz
- HDU 1272 小希的迷宫
- 使用Microsoft Web Deploy技术自动部署
- HDU 3062 Party (2-SAT)
- 纠结了很久的问题,关于sql中单字段重复,取一条全字段的方法。
- NS3下的802.15.4模块(lr-wpan)
- (七)sping之定时任务Quartz
- MSP430 与 ARM Cortex系列在电池供电应用上的比较
- 以编程方式调用按钮的 Click 事件
- epub格式电子书剖析 .
- (八)sping之国际化
- 电子商务行业将迎来大洗牌 淘宝小卖家该何去何从?
- 应对图片链接不能“复制”
- unity 3d 射击游戏 (一)场景和飞机
- Chrome常用插件