`

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>

 

 

分享到:
评论

相关推荐

    Spring3.0定时任务简单实例web工程

    总结来说,这个"Spring3.0定时任务简单实例web工程"提供了一个使用Spring 3.0实现定时任务的实例,通过配置`TaskScheduler`,定义任务类,使用`@Scheduled`注解设置执行计划,最后在Web应用启动时启动任务,可以方便...

    定时任务spring3.0

    Spring 3.0版本引入了对定时任务的支持,这是一个非常实用的功能,可以帮助开发者实现定期执行的任务,如数据同步、报表生成等。本文将深入探讨Spring 3.0中的定时任务实现,并结合Quartz库来进一步扩展定时任务的...

    Spring3.0Jar包

    9. **Quartz 集成**:Spring 3.0 提供了对 Quartz 定时任务调度器的集成,方便进行定时任务的管理和执行。 10. **国际化支持**:Spring 提供了 `MessageSource` 接口,用于处理多语言消息,使得应用能够适应不同...

    spring3.0发行版

    例如,MessageSource接口提供了更强大的国际化支持,而TaskExecutor和TaskScheduler接口则使得异步任务处理和定时任务的实现变得简单。 总之,Spring 3.0发行版是一个里程碑式的版本,它通过模块化设计、Java配置、...

    spring 3.0 src

    8. **任务调度**:Spring 3.0引入了TaskExecutor和TaskScheduler接口,提供了灵活的任务执行和调度能力,支持定时任务和并发任务。 9. **国际化(Internationalization,i18n)**:Spring 3.0提供了更强大的国际化...

    Spring3.0 mvc 定时器及多线程任务demo

    在Spring 3.0中,我们可以使用Spring的TaskExecutor或ScheduledTaskRunner来实现定时任务。定时任务主要用于执行一些周期性的操作,如数据清理、报表生成、系统监控等。Spring提供了一个名为`@Scheduled`的注解,...

    spring3.0+quartz-1.6.0定时

    总结起来,"spring3.0+quartz-1.6.0定时"的实现涉及到Spring框架的定时任务支持和Quartz库的结合使用,通过Spring的配置管理Quartz调度器,定义任务和触发器,最后编写具体任务逻辑的Java类。这种组合在实际项目中...

    spring3.0 + Quartz1.52 + applicationContext.xml

    这个压缩包“spring3.0 + Quartz1.52 + applicationContext.xml”显然是一个关于如何在Spring 3.0环境中集成Quartz 1.52版本的示例或教程资源。 首先,`applicationContext.xml`是Spring框架的核心配置文件,它定义...

    Spring3.0作业调度

    总的来说,Spring 3.0的作业调度功能是其强大的自动化工具之一,它不仅提供了基本的定时任务执行,还通过新的API和机制,让开发者能够构建复杂、高效且可靠的调度解决方案。无论是在小型项目还是大型企业级应用中,...

    spring3.0的中文帮助文档和权威开发指南

    13. **Quartz调度器集成**:Spring提供了与Quartz作业调度库的集成,方便安排定时任务。 14. **国际化(i18n)**:Spring提供了对国际化消息资源的支持,使应用程序能轻松地适应多种语言环境。 15. **测试支持**:...

    spring定时任务实现

    Spring 3.0以后引入了自己的Task模块,提供了一种轻量级的定时任务解决方案。Spring Task使用起来比Quartz简单,同时保留了足够的灵活性。它可以处理固定间隔的任务,也可以使用`CronTrigger`实现基于cron表达式的...

    Spring 框架自带定时任务和Quartz定时任务

    Spring Task是在Spring 3.0之后引入的,它使用起来相对简单,支持线程池,可以高效处理不同的定时任务。Spring Task可以通过注解或XML配置文件来配置任务。如果使用注解的方式,仅需要在方法上加上@Scheduled注解,...

    spring3配置quartz定时任务

    本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务是在指定时间点或按照一定规律自动执行的任务,这在业务系统中非常常见,例如数据清理、报表生成等。Quartz提供...

    SpringTask动态定时任务的使用案例

    它自Spring 3.0版本之后内置了定时任务功能。SpringTask简化了定时任务的配置和使用,相比于传统的Quartz调度器,它的配置更加简单,使用也更加方便。 在介绍SpringTask的使用之前,我们首先了解一些概念。在Java中...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    Spring框架结合Quartz库,提供了一种强大而灵活的方式来管理这些定时任务。本项目旨在演示如何利用Spring和Quartz从数据库中动态加载定时任务,并实现对它们的增删改查功能。以下是关于这个主题的详细知识讲解。 ...

    Spring普通定时任务和动态设置定时任务

    ### Spring 普通定时任务与动态设置定时任务详解 #### 一、Spring 定时任务简介 在软件开发过程中,经常会遇到需要周期性执行的任务,例如数据备份、定时发送邮件等。对于这类需求,Spring 提供了一种简单且灵活的...

    Spring提供的三种定时任务机制及其比较

    Spring 3.0引入了`@Scheduled`注解,这是一种更简洁的定时任务解决方案。通过在方法上添加此注解,Spring的定时任务执行器会自动处理任务调度。这种方法适用于简单任务,且不需Quartz的复杂特性。例如: ```java ...

    spring定时任务

    在Spring框架中,定时任务是实现自动化操作的重要功能,它允许开发者在特定时间点或按照预设周期执行任务。Spring提供了两种主要的方式来配置定时任务:基于XML和基于Java-config的配置方式。 首先,我们来详细了解...

    spring定时器3.0之前和3.0之后版本以及相应的项目实例

    Spring 3.0引入了重大改进,弃用了基于`java.util.Timer`的定时器,并引入了`org.springframework.scheduling.concurrent`包,主要基于`java.util.concurrent.ScheduledExecutorService`实现定时任务。新的定时器...

Global site tag (gtag.js) - Google Analytics