spring 3.0 定时任务

spring3.0定时任务配制与使用

1、配置applicationContext-schedule.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:aop="http://www.springframework.org/schema/aop" 
       xmlns:tx="http://www.springframework.org/schema/tx" 
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:p="http://www.springframework.org/schema/p" 
       xmlns:task="http://www.springframework.org/schema/task" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
       http://www.springframework.org/schema/task 
       http://www.springframework.org/schema/task/spring-task-3.0.xsd 
       "> 
    <context:component-scan base-package="com.jyd.dzadmin.action.order" /> 
    <task:annotation-driven/>  
      <bean id="updateOrderDataTask" class="com.jyd.dzadmin.dao.order.UpdateOrderDataTask"/> 
</beans>

 2、业务处理代码,如下所示:

 

package com.jyd.dzadmin.dao.order;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.jyd.dzadmin.base.LogMessage;
import com.jyd.dzadmin.dataobject.entity.order.PxOrder;
import com.jyd.dzadmin.dataobject.entity.trade.PxOfferHistoryVolume;
import com.jyd.dzadmin.dataobject.entity.trade.PxTradeDay;
import com.jyd.dzadmin.service.order.PxOrderManager;
import com.jyd.dzadmin.service.trade.PxTradeDayManager;

/**************************************************** 
 * 定时更新PX_OFFER_HISTORY_VOLUME
 * @author huangli
 * @date 2016-07-15
 * @version 2.0
 * @desciption
 *****************************************************/
@Component
public class UpdateOrderDataTask{
	@SuppressWarnings("unused")
	private static final long serialVersionUID = 640950911848231784L;
	private static Logger logger = LoggerFactory.getLogger(UpdateOrderDataTask.class);
	
	private PxOfferHistoryVolume pxOfferHistoryVolume;
	
	private static PxTradeDayManager pxTradeDayManager;
	
	private static PxOrderManager pxOrderManager;
	
	private static UpdateOrderDataTask instance = null;
	
	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
	String nowTime = df.format(new Date());
	
	//@Scheduled(fixedDelay=1000)  //第一种方式  
    //fixedDelay延时多少毫秒,多少毫秒执行一次  
	
	//"0 59 23 * * ?"    每天晚上11点59分触发 
    //@Scheduled(cron="0 * * * * *") 
	@Scheduled(cron="0 59 23 * * ?") 
	public void updateOrderDataJob(){
		boolean fg = false;//false:非交易时间 true:是交易时间
			logger.info(String.format(LogMessage.METHOD_BEGIN ,"更新历史表订单数据"));
			List<PxTradeDay> tList = pxTradeDayManager.getAllStartTime();
			//判断系统时间是否是交易日时间
			for(PxTradeDay pd:tList){
				String startTime = df.format(pd.getStartTime());
				if(nowTime.equals(startTime)){
					fg = true;
					logger.info(String.format(LogMessage.METHOD_BEGIN ,nowTime+"是交易日时间"));
					break;
				}
			}
			
			List<PxOrder> plist = pxOrderManager.getAllPxOrder();
			//是:交易表中是交易时间的数据插入库
			if(fg == true){
				for(PxOrder p:plist){
					String confirmTime = df.format(p.getConfirmTime());
					if(confirmTime.equals(nowTime)){
						PxOfferHistoryVolume px = new PxOfferHistoryVolume();
						px.setCatCode(p.getCatCode());
						px.setClassCode(p.getClassCode());
						px.setBrandCode(p.getBrandCode());
						px.setOrderCount(p.getOrderPlanCount());
						px.setRealOrderCount(p.getOrderCount());
						px.setCreateDate(new Date());
						
						if(p.getUnitPrice() != 0){
							px.setRealDealCount(p.getPayAmt()/p.getUnitPrice());
						}
						
						px.setCreateDate(p.getConfirmTime());
						pxOrderManager.addPxHisttory(px);
					}
				}
			}
			logger.info(String.format(LogMessage.METHOD_BEGIN ,"更新历史表订单数据成功")); 
		
	}
    
	public PxOfferHistoryVolume getPxOfferHistoryVolume() {
		return pxOfferHistoryVolume;
	}
	public void setPxOfferHistoryVolume(PxOfferHistoryVolume pxOfferHistoryVolume) {
		this.pxOfferHistoryVolume = pxOfferHistoryVolume;
	}
	
	public PxTradeDayManager getPxTradeDayManager() {
		return pxTradeDayManager;
	}

	public void setPxTradeDayManager(PxTradeDayManager pxTradeDayManager) {
		this.pxTradeDayManager = pxTradeDayManager;
	}

	public PxOrderManager getPxOrderManager() {
		return pxOrderManager;
	}

	public void setPxOrderManager(PxOrderManager pxOrderManager) {
		this.pxOrderManager = pxOrderManager;
	}

	 /** 
     * 返回当前对象
     * 单例模式
     */
	public static UpdateOrderDataTask getInstance(
			PxOrderManager pxOrderManager2, PxTradeDayManager pxTradeDayManager2) {
		if (instance == null) {
            instance = new UpdateOrderDataTask();
        }
        	pxOrderManager = pxOrderManager2;
        	pxTradeDayManager = pxTradeDayManager2;
		return instance;
	}
}

 3、服务器启动,自动加载业务处理类,如下所示:

package com.jyd.dzadmin.base;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.jyd.dzadmin.dao.order.UpdateOrderDataTask;
import com.jyd.dzadmin.dataobject.entity.system.PxDictionarys;
import com.jyd.dzadmin.service.enterprise.PxEnterpriseManager;
import com.jyd.dzadmin.service.order.PxOrderManager;
import com.jyd.dzadmin.service.system.PxDictionarysManager;
import com.jyd.dzadmin.service.trade.PxCategoryManager;
import com.jyd.dzadmin.service.trade.PxIndustryManager;
import com.jyd.dzadmin.service.trade.PxPrdBrandManager;
import com.jyd.dzadmin.service.trade.PxPrdClassManager;
import com.jyd.dzadmin.service.trade.PxTradeDayManager;
import com.jyd.dzadmin.service.trade.PxWarehouseManager;

public class AutoLoad extends HttpServlet{

	private static final long serialVersionUID = -7268912545762560424L;
	private PxDictionarysManager pxDictionarysManager;
	
	@Override
	public void init() throws ServletException {
		super.init();
		//装载字典
		WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
		pxDictionarysManager = (PxDictionarysManager) ac.getBean("pxDictionarysManager");
		Map<String, Map<String,String>> dictMap = new HashMap<String, Map<String,String>>();
		List<PxDictionarys> listmain =pxDictionarysManager.findAllDict();
		if(listmain.size()>0){
			String dictname = "";
			Map<String, String> detailMap = new HashMap<String, String>() ;
			for(PxDictionarys dm : listmain){
				if(!dictname.equals(dm.getDictname())){
					if(!"".equals(dictname)){
						dictMap.put(dictname, detailMap);
					}
					detailMap = new HashMap<String, String>();
					dictname = dm.getDictname();
				}
				detailMap.put(dm.getValue(), dm.getName());
			}
			dictMap.put(dictname,detailMap);
			getServletContext().setAttribute("dict_map",dictMap);
		}
		//向缓存中放行业
		PxIndustryManager pxIndustryManager = (PxIndustryManager) ac.getBean("pxIndustryManager");
		pxIndustryManager.refresh();
		//向缓存中存放品类
		PxCategoryManager pxCategoryManager = (PxCategoryManager) ac.getBean("pxCategoryManager");
		pxCategoryManager.refresh();
		//向缓存中存放品牌
		PxPrdBrandManager pxPrdBrandManager = (PxPrdBrandManager) ac.getBean("pxPrdBrandManager");
		pxPrdBrandManager.refresh();
		//向缓存中存放品种
		PxPrdClassManager pxPrdClassManager = (PxPrdClassManager) ac.getBean("pxPrdClassManager");
		pxPrdClassManager.refresh();
		//向缓存中存放交割库
		PxWarehouseManager pxWarehouseManager = (PxWarehouseManager) ac.getBean("pxWarehouseManager");
		pxWarehouseManager.refresh();
		//向缓存中存放企业
		PxEnterpriseManager pxEnterpriseManager = (PxEnterpriseManager) ac.getBean("pxEnterpriseManager");
		pxEnterpriseManager.refresh();

		//郭文文 部署工作流 
		/*PxProcessManager pxProcessManager =  (PxProcessManager)ac.getBean("pxProcessManager");
		pxProcessManager.deploy();*/
		
		//薛昌贵 启动订单过期定时器  2016-01-12 
		/*PxOrderManager pxOrderManager = (PxOrderManager) ac.getBean("pxOrderManager");
		PxTradeDayManager pxTradeDayManager = (PxTradeDayManager) ac.getBean("pxTradeDayManager");
		OrderExpireTimer oet = OrderExpireTimer.getInstance(pxOrderManager ,pxTradeDayManager);

		PxVisitManager pxVisitManager = (PxVisitManager) ac.getBean("pxVisitManager");
		VisitUtil urmc = VisitUtil.getInstance(pxVisitManager);*/
		
//		PxOrderManager pxOrderManager = (PxOrderManager) ac.getBean("pxOrderManager");
//		PxTradeDayManager pxTradeDayManager = (PxTradeDayManager) ac.getBean("pxTradeDayManager");
//		OrderExpireTimer oet = OrderExpireTimer.getInstance(pxOrderManager ,pxTradeDayManager);
//
//		PxVisitManager pxVisitManager = (PxVisitManager) ac.getBean("pxVisitManager");
//		VisitUtil urmc = VisitUtil.getInstance(pxVisitManager);
		
		
		PxOrderManager pxOrderManager = (PxOrderManager) ac.getBean("pxOrderManager");
		PxTradeDayManager pxTradeDayManager = (PxTradeDayManager) ac.getBean("pxTradeDayManager");
		//UpdateOrderDataTask updateOrderDataTask = (UpdateOrderDataTask) ac.getBean("updateOrderDataTask");
		
		UpdateOrderDataTask oet = UpdateOrderDataTask.getInstance(pxOrderManager ,pxTradeDayManager);
		oet.updateOrderDataJob();
	}

	public PxDictionarysManager getPxDictionarysManager() {
		return pxDictionarysManager;
	}

	public void setPxDictionarysManager(PxDictionarysManager pxDictionarysManager) {
		this.pxDictionarysManager = pxDictionarysManager;
	}

}

 4、web.xml 加载autoLoad类,服务器启动自动加载autoLoad类,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
		 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<!-- session超时定义,单位为分钟 -->
	<session-config>
		<session-timeout>10</session-timeout>
	</session-config>
	
	<!-- 默认首页定义 -->
	<welcome-file-list>
		<welcome-file>adminsys/index.htm</welcome-file>
	</welcome-file-list>
	
	<!-- 下载文件 -->
	<servlet>
       <servlet-name>ServletDownload</servlet-name>
       <servlet-class>com.jyd.common.util.ServletDownload</servlet-class>
 	</servlet>
 	<servlet-mapping>
       <servlet-name>ServletDownload</servlet-name>
       <url-pattern>/ServletDownload</url-pattern>
 	</servlet-mapping> 
	
	<!-- Error Page定义 -->
	<!-- <error-page>
		<error-code>500</error-code>
		<location>/commons/error.jsp</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/commons/404.jsp</location>
	</error-page>
	<error-page>
		<error-code>403</error-code>
		<location>/commons/403.jsp</location>
	</error-page> -->
			 
	<!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用逗号分隔
	  此参数用于后面的Spring-Context loader -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring/applicationContext-*.xml</param-value>
	</context-param>
	
	<!-- <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>dzadmin.root</param-value>
  </context-param> -->
	
	<!-- JSTL i18n定义-->
	<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
		<param-value>i18n/messages</param-value>
	</context-param>
	
	<!--Spring ApplicationContext 载入 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- 使Spring支持request与session的scope,如:<bean id="loginAction" class="com.foo.LoginAction" scope="request"/> -->
	<listener>
	  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>

	<!-- Spring 刷新Introspector防止内存泄露 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>
	<!-- filter start -->
	<!--  <filter>
		<filter-name>adminResourceFilter</filter-name>
		<filter-class>com.jyd.espot.base.interceptor.AdminResourceFilter</filter-class>
	</filter>
	-->
	<!-- Character Encoding filter -->
	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>

	<!-- FlashScope filter,在Flash中存储的数据,在下一次http请求中也可以继续引用,使用方法为Flash.current().error("存在错误"); -->
	<filter>
		<filter-name>FlashFilter</filter-name>
		<filter-class>cn.org.rapid_framework.web.scope.FlashFilter</filter-class>
	</filter>

	<!-- LoggerMDCFilter,存放在MDC中的数据,log4j可以直接引用并作为日志信息打印出来. -->
	<filter>
		<filter-name>LoggerMDCFilter</filter-name>
		<filter-class>com.jyd.common.filter.LoggerMDCFilter</filter-class>
	</filter>
	
	<!-- Log4J 配置  add by xiongzhao begin -->
	<!-- <context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:log4j.properties</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener> -->
	<!-- Log4J 配置  add by xiongzhao end -->
	
	<filter>
		<filter-name>struts2Filter</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	
	<!-- filter end -->
	<!-- filter-mapping start -->
	<!-- <filter-mapping>
		<filter-name>adminResourceFilter</filter-name>
		<url-pattern>/adminsys/jsp/*</url-pattern>
	</filter-mapping>
	 -->
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>FlashFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>LoggerMDCFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>

	<!-- <filter-mapping>
		<filter-name>LoggerMDCFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping> -->
    
    <filter-mapping>
        <filter-name>struts2Filter</filter-name>
        <url-pattern>*.do</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    <!-- filter-mapping end -->
	<servlet>  
   		<servlet-name>autoLoad</servlet-name>  
   		<servlet-class>com.jyd.dzadmin.base.AutoLoad</servlet-class>  
   		<load-on-startup>1</load-on-startup>
  	</servlet>    
</web-app>

 

猜你喜欢

转载自wge838.iteye.com/blog/2312401
今日推荐