spring 定时执行任务

1、applicationContext-job.xml 配置文件如下:
<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	
	<bean id="receiveWSDate"
	      class="com.XXXX.agent.webservices.client.WebServiceClient">
	</bean>
	
	<bean id="receiveWSDateJob"
	      class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	      <property name="targetObject" ref="receiveWSDate"></property>
	      <property name="targetMethod" value="getAgentInfo"></property>
	      <property name="concurrent" value="false"></property>
	</bean>
	
	<!-- 调用触发器trigger 每周一至周五 凌晨02点执行一次同步 -->
	<bean id="receiveWSDateTrigger"
	      class="org.springframework.scheduling.quartz.CronTriggerBean">
	      <property name="jobDetail" ref="receiveWSDateJob"></property>
	      <property name="cronExpression">
	           <value>0 00 02 ? * MON-FRI</value> 
	      </property> 
	</bean>
	
	<!-- 调度工厂  -->
	<bean id="xxxx_jobScheduler"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="receiveWSDateTrigger" />
			</list>
		</property>
		<!--  property name="startupDelay" value="5"></property-->
	</bean>
	
	<!-- ********************chenxl,任务管理分配,开始******************************************* -->
	
	<bean id="taskWSHost"
	      class="com.XXXX.agent.webservices.host.TaskWSHost">
	</bean>
	
	<bean id="taskWSHostJob"
	      class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	      <property name="targetObject" ref="taskWSHost"></property>
	      <property name="targetMethod" value="getTaskInfo"></property>
	      <property name="concurrent" value="false"></property>
	</bean>
	
	<!-- 调用触发器trigger 每周一至周五 早上9点到下午6点每五分钟执行一次 -->
	<bean id="taskWSHostTrigger"
	      class="org.springframework.scheduling.quartz.CronTriggerBean">
	      <property name="jobDetail" ref="taskWSHostJob"></property>
	      <property name="cronExpression">
	           <value>0 0/5 09-18 ? * MON-FRI</value> 
	      </property> 
	</bean>
	
	<!-- 调度工厂  -->
	<bean id="xxxx_jobScheduler2"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="taskWSHostTrigger" />
			</list>
		</property>
		<!--  property name="startupDelay" value="5"></property-->
	</bean>
	
	<!-- ********************chenxl,任务管理分配,结束******************************************* -->
	
    


</beans>	
2、webservice服务端TaskWSHost.java
package com.XXX.agent.webservices.host;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.XXX.agent.service.IAutoOutVisitService;

/**
 * 
 * 此类描述的是:  任务管理的webservice服务端

 * @author: XXX@126.com  

 * @version: 2013-7-29 上午11:15:39
 */
public class TaskWSHost {
	private static ApplicationContext appcontext;
	   
	   protected final Log logger = LogFactory.getLog(this.getClass().getName());
	  
	   public static ApplicationContext initBeanFactory() {
		   if(null == appcontext) {
			   appcontext = new ClassPathXmlApplicationContext("classpath:applicationContext-resource.xml");
		   }
		   return appcontext;
	   }
  	 
	 /**
	  * 
	  * 此方法描述的是:  自动外乎回访,把数据给青牛
	 
	  * @author: XXXX@126.com  
	 
	  * @version: 2013-7-31 下午04:09:29
	 
	  * @param name
	  * @return String
	  */
     public String getTaskInfo(){
    	 
    	   appcontext = initBeanFactory(); //获取getBean对象
      	 
    	   IAutoOutVisitService iAutoOutVisitService  = (IAutoOutVisitService) appcontext.getBean("mgrAutoOutVisitService");
      	   
	  	   String str = iAutoOutVisitService.getTaskInfoStr();//把相关数据推送给青牛
	  	   
	  	   System.out.println("===================str:"+str);
	  	   
	  	   return str;
     }
     /**
      * 
      * 此方法描述的是:  获取从青牛返回的数据
      * @author: XXXX@126.com  
      * @version: 2013-7-30 下午03:01:08
	  * @param mobile :电话号码
	  * @param userName :姓名(负责人)
	  * @param windowName :窗口名称
	  * @param orderTel :下单电话
	  * @param selectTel :查询电话
	  * @param complainTel :投诉电话
	  * @param obStatus :外拨电话状态
	  * @param resultFlag :确认结果
	  * @param startDate :外拨电话时间
	  * @param endDate :外拨结束时间
      * @return String
      */
     public String getReturnData(String mobile, String userName, String windowName, String orderTel, String selectTel, 
    		 String complainTel, String obStatus, String resultFlag, String startDate, String endDate){
    	 appcontext = initBeanFactory(); //获取getBean对象
    	 
  	   	 IAutoOutVisitService iAutoOutVisitService  = (IAutoOutVisitService) appcontext.getBean("stasAutoOutVisitService");
  	   	 
  	     String str = iAutoOutVisitService.getReturnInfo(mobile, userName, windowName, orderTel, selectTel, 
  	    		 complainTel, obStatus, resultFlag, startDate, endDate);
  	   	 
    	 return str;
     }
}

 

下面是在网上搜索的一些信息,方便大家查看就正过来了:
关于简单触发器和复杂触发器,查考下面的解释: 


Quartz设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是
SimpleTrigger和CronTrigger。
SimpleTrigger为需要简单打火调度而设计。典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。
另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。

CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,
CronTrigger是基于Unix克隆表达式的。

作为一个例子,下面的Quartz克隆表达式将在星期一到星期五的每天上午10点15分执行一个作业。
0 15 10   * MON-FRI

下面的表达式
0 15 10   * 6L 2002-2005
将在2002年到2005年的每个月的最后一个星期五上午10点15分执行作业。

你不可能用SimpleTrigger来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。 
更多详细介绍参考此处: 

关于cronExpression的介绍: 
 
字段  允许值 允许的特殊字符 

秒   0-59, - * /
 


分   0-59, - * /
 


小时  0-23, - * /
 


日期  1-31, - *   / L W C
 


月份  1-12 或者 JAN-DEC, - * /
 


星期  1-7 或者 SUN-SAT, - *   / L C #
 


年(可选)留空, 1970-2099, - * /
 
  
如上面的表达式所示: 

“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。 

“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
 
“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”. 

“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。 


“L”字符指定在月或者星期中的某天(最后一天)。即“Last ”的缩写。但是在星期和月中“L”表示不同的意思,如:在月子段中“L”指月份的最后一天-1月31日,2月28日
,如果在星期字段中则简单的表示为“7”或者“SAT”。如果在星期字段中在某个value值得后面,则表示“某月的最后一个星期value”,如“6L”表示某月的最后一个星期五。

“W”字符只能用在月份字段中,该字段指定了离指定日期最近的那个星期日。

“#”字符只能用在星期字段,该字段指定了第几个星期value在某月中


 



表达式 意义 



"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触发
 


"0 15 10 ? * 6#3"           每月的第三个星期五上午10:15触发
 
 
每天早上6点   0 6 * * *  

每两个小时    0 */2 * * *
 
 
晚上11点到早上8点之间每两个小时,早上八点      0 23-7/2,8 * * * 

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 0 11 4 * 1-3 
 
1月1日早上4点   0 4 1 1 *

 


定时批处理作业是J2EE企业应用里很重要的一环,用来在晚间进行财务挂账,数据转存,新闻联播等等操作。
 
    而在Spring里,已经很好的集成了Quartz,简单到像配cron一样,在xml文件里面配一下时间就可以自动执行,不需要写一行代码。Spring对Quartz大刀阔斧的简化堪称范例,Quartz项目组也许可以学习一下。
     <bean id="methodInvokingJobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject"><ref bean="financeDAO"/></property>
        <property name="targetMethod"><value>confirmOrder</value></property>
    </bean>     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="methodInvokingJobDetail"/>
        </property>
        <property name="cronExpression">
            <value>0 0 6,12,20 * * ?</value>
        </property>
    </bean>     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list><ref local="cronTrigger"/></list>
        </property>
    </bean> 
上面这段配置文件规定了在早上6点和晚上8点执行financeDAO对象的confirmOrder()方法.


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值