spring quartz定时器的简单配置和使用
第一步:导入相关jar包
(注:单单是在后台执行需要的jar包,若是经过tomcat执行,需额外添加一个jar包——jta-1.1.jar)
不同版本需要依赖的jar:
quartz-all-1.6.0.jar版本需要的jar包:
commons-collections-3.2.jar
commons-logging-1.1.1.jar
log4j-1.2.16.jar
spring.jar
quartz-1.8.4.jar版本需要的jar包:
commons-collections-3.2.jar
commons-logging-1.1.1.jar
log4j-1.2.16.jar
quartz-1.8.4.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
spring.jar
第二步:新建立一个业务bean-->cn.yulon.service.MessageService
packagecn.yulon.service;
publicclassMessageService{
inti;
publicvoidprintLog(){
i++;
System.out.println("thisismytimer:"+i);
}
第三步:在Spring配置文件time-bean.xml,如下
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--第一步:配置好要定时调用的业务类-->
<beanid="messageService"class="cn.yulon.service.MessageService"/>
<!--第二步:定义好具体要使用类的哪一个业务方法-->
<beanid="printTimerJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--目标bean-->
<propertyname="targetObject"ref="messageService"/>
<!--要执行目标bean的哪一个业务方法-->
<propertyname="targetMethod"value="printLog"/>
<!--是否并发-->
<propertyname="concurrent"value="false"/>
</bean>
<!--第三步:定义好调用模式:如每隔2秒钟调用一次或每天的哪个时间调用一次等-->
<beanid="printTimerTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
<propertyname="jobDetail"ref="printTimerJob"/>
<propertyname="cronExpression"value="0/2****?"/>
</bean>
<!--启动定时器-->
<!--第四步把定义好的任务放到调度(Scheduler)工厂里面,注意这里的refbean-->
<beanid="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<propertyname="applicationContextSchedulerContextKey"value="applicationContext"/>
<propertyname="triggers">
<list>
<refbean="printTimerTrigger"/>
</list>
</property>
</bean>
<!--end-->
</beans>
相关介绍:
<!--
在xml里配置值得关注的是<propertyname="cronExpression"value="0/1****?"/>表示每隔一秒钟执行一次,例子如下:
0010,14,16**每天上午10点,下午2点和下午4点
00,15,30,45*1-10*每月前10天每隔15分钟
3000112012在2012年1月1日午夜过30秒时
008-5*MON-FRI每个工作日的工作时间
-区间
*通配符你不想设置那个字段
-->
<!--
cronExpression的介绍:
按顺序<value>秒分小时日期月份星期年<value>
字段允许值允许的特殊字符
秒0-59,-*/
分0-59,-*/
小时0-23,-*/
日期1-31,-*?/LWC
月份1-12或者JAN-DEC,-*/
星期1-7或者SUN-SAT,-*?/LC#
年(可选)留空,1970-2099,-*/
“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。
-->
在xml里配置值得关注的是<propertyname="cronExpression"value="0/1****?"/>表示每隔一秒钟执行一次,例子如下:
0010,14,16**每天上午10点,下午2点和下午4点
00,15,30,45*1-10*每月前10天每隔15分钟
3000112012在2012年1月1日午夜过30秒时
008-5*MON-FRI每个工作日的工作时间
-区间
*通配符你不想设置那个字段
第四步:新建测试类SpringTest
packagecn.test;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
publicclassSpringTest{
publicstaticvoidmain(String[]args){
ApplicationContextact=newClassPathXmlApplicationContext("time-bean.xml");
}
}
运行结果如下:
thisismytimer:1
thisismytimer:2
thisismytimer:3
thisismytimer:4
thisismytimer:5
web.xml的配置:
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.5"
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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--加载spring的配置文件(一个或者多个)-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:time-bean.xml,applicationContext*.xml</param-value>
</context-param>
<!--配置spring监听器(作用就是启动Web容器时,自动装配applicationContext.xml文件的配置信息)-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
应用场合:如做一些定时提醒,定时发送邮件、短信,日志定时备份等应用