定时支配-Spring集成Quartz

定时调度-Spring集成Quartz

定时调度就是设定时间规则,系统按照规则调用设定的功能函数。

这个是我在项目中碰到的,大家用得到的就看看

有不足之处还请大家指出!

不用谢!


(1)项目得添加Spring框架


(2)导入Quartz需要使用的jar包,总共是四个

quartz-1.6.0.jar

spring-2.0.6.jar

commons-collections.jar

jta.jar


(3) web.xml中添加以下代码,该代码是对spring文件的引用,我这里功能简单,所以直接使用applicationContext.xml。大家如果项目复杂的话,可以自己在定义一个spring文件,只要引用到web.xml就可以了。

  <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value> 
      /WEB-INF/applicationContext.xml
  </param-value>
 </context-param>

(4)配置spring文件

 

 

<?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.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

	<!--  要调用的工作类 -->
	<bean id="quartzForTest" class="com.gl.mtt.Quartz.QuartzForTest" />
	
	<!-- 定义调用对象和调用对象的方法 -->
	<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
	   <!-- 调用的类  -->
	   <property name="targetObject">
	     <ref bean="quartzForTest"/>
	   </property>
	   <!--  调用类中的方法 -->
	   <property name="targetMethod">
	      <value>work</value>
	   </property>
    </bean>
    
    <!-- 定义触发时间 -->
    <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
      <property name="jobDetail">
         <ref bean="jobtask" />
      </property>
     <!-- Cron表达式0 0/15 * * * ? 每15分钟执行一次 ; 0 46 11 * * ? 11点46执行一次; 0 0 2 * * ?每天两点执行;-->
      <property name="cronExpression">
       <value>0/2 * * * * ?</value>
      </property>
    </bean>
    
    <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
    <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <property name="triggers">
         <list>
            <ref bean="doTime"/>
         </list>
       </property>
    </bean> 
</beans>

 

 

 

 

 

这个是新建的spring文件,我建议,如果系统功能多的话,就单独用一个spring来配置。


(5)在项目中建立相应的类和功能函数

 

public class QuartzForTest {	
	public void work(){		
		System.out.println("test");
	}
}

 

 

 

(6)完成!

ps:spring cron表达式

Cron表达式是一个字符串,字符串以56个空格隔开,分开工67个域,每一个域代表一个含义,Cron有如下两种语法

格式: 
Seconds Minutes Hours DayofMonth Month DayofWeek Year 
 
Seconds Minutes Hours DayofMonth Month DayofWeek 
每一个域可出现的字符如下:
 
 
Seconds:可出现,-  *  / 四个字符,有效范围为0-59的整数
   
Minutes:
可出现,-  *  / 四个字符,有效范围为0-59的整数
   
Hours:
可出现,-  *  / 四个字符,有效范围为0-23的整数
   
DayofMonth:
可出现,-  *  / ? L W C八个字符,有效范围为0-31的整数
    
Month:
可出现,-  *  / 四个字符,有效范围为1-12的整数或
JAN-DEc   
DayofWeek:
可出现,-  *  / ? L C #四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
   
Year:
可出现,-  *  / 四个字符,有效范围为1970-2099
  

举例:

0 0 10,14,16 * * ? 每天上午10点,下午2点,4 
0 0/30 9-17 * * ?   
朝九晚五工作时间内每半小时
 
0 0 12 ? * WED 
表示每个星期三中午12
 
"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:102: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触发
 
"0 15 10 ? * 6#3" 
每月的第三个星期五上午10:15触发 


pps:打完收工!

ppps:我上传了一个项目包,可以直接使用的,jar包也在里面。

再见!


 

 

1 楼 lkfnn 2011-06-24  
好东西,讲的真明白。