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工程"提供了一个使用Spring 3.0实现定时任务的实例,通过配置`TaskScheduler`,定义任务类,使用`@Scheduled`注解设置执行计划,最后在Web应用启动时启动任务,可以方便...
Spring 3.0版本引入了对定时任务的支持,这是一个非常实用的功能,可以帮助开发者实现定期执行的任务,如数据同步、报表生成等。本文将深入探讨Spring 3.0中的定时任务实现,并结合Quartz库来进一步扩展定时任务的...
9. **Quartz 集成**:Spring 3.0 提供了对 Quartz 定时任务调度器的集成,方便进行定时任务的管理和执行。 10. **国际化支持**:Spring 提供了 `MessageSource` 接口,用于处理多语言消息,使得应用能够适应不同...
例如,MessageSource接口提供了更强大的国际化支持,而TaskExecutor和TaskScheduler接口则使得异步任务处理和定时任务的实现变得简单。 总之,Spring 3.0发行版是一个里程碑式的版本,它通过模块化设计、Java配置、...
8. **任务调度**:Spring 3.0引入了TaskExecutor和TaskScheduler接口,提供了灵活的任务执行和调度能力,支持定时任务和并发任务。 9. **国际化(Internationalization,i18n)**:Spring 3.0提供了更强大的国际化...
在Spring 3.0中,我们可以使用Spring的TaskExecutor或ScheduledTaskRunner来实现定时任务。定时任务主要用于执行一些周期性的操作,如数据清理、报表生成、系统监控等。Spring提供了一个名为`@Scheduled`的注解,...
总结起来,"spring3.0+quartz-1.6.0定时"的实现涉及到Spring框架的定时任务支持和Quartz库的结合使用,通过Spring的配置管理Quartz调度器,定义任务和触发器,最后编写具体任务逻辑的Java类。这种组合在实际项目中...
这个压缩包“spring3.0 + Quartz1.52 + applicationContext.xml”显然是一个关于如何在Spring 3.0环境中集成Quartz 1.52版本的示例或教程资源。 首先,`applicationContext.xml`是Spring框架的核心配置文件,它定义...
总的来说,Spring 3.0的作业调度功能是其强大的自动化工具之一,它不仅提供了基本的定时任务执行,还通过新的API和机制,让开发者能够构建复杂、高效且可靠的调度解决方案。无论是在小型项目还是大型企业级应用中,...
13. **Quartz调度器集成**:Spring提供了与Quartz作业调度库的集成,方便安排定时任务。 14. **国际化(i18n)**:Spring提供了对国际化消息资源的支持,使应用程序能轻松地适应多种语言环境。 15. **测试支持**:...
Spring 3.0以后引入了自己的Task模块,提供了一种轻量级的定时任务解决方案。Spring Task使用起来比Quartz简单,同时保留了足够的灵活性。它可以处理固定间隔的任务,也可以使用`CronTrigger`实现基于cron表达式的...
Spring Task是在Spring 3.0之后引入的,它使用起来相对简单,支持线程池,可以高效处理不同的定时任务。Spring Task可以通过注解或XML配置文件来配置任务。如果使用注解的方式,仅需要在方法上加上@Scheduled注解,...
本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务是在指定时间点或按照一定规律自动执行的任务,这在业务系统中非常常见,例如数据清理、报表生成等。Quartz提供...
它自Spring 3.0版本之后内置了定时任务功能。SpringTask简化了定时任务的配置和使用,相比于传统的Quartz调度器,它的配置更加简单,使用也更加方便。 在介绍SpringTask的使用之前,我们首先了解一些概念。在Java中...
Spring框架结合Quartz库,提供了一种强大而灵活的方式来管理这些定时任务。本项目旨在演示如何利用Spring和Quartz从数据库中动态加载定时任务,并实现对它们的增删改查功能。以下是关于这个主题的详细知识讲解。 ...
### Spring 普通定时任务与动态设置定时任务详解 #### 一、Spring 定时任务简介 在软件开发过程中,经常会遇到需要周期性执行的任务,例如数据备份、定时发送邮件等。对于这类需求,Spring 提供了一种简单且灵活的...
Spring 3.0引入了`@Scheduled`注解,这是一种更简洁的定时任务解决方案。通过在方法上添加此注解,Spring的定时任务执行器会自动处理任务调度。这种方法适用于简单任务,且不需Quartz的复杂特性。例如: ```java ...
在Spring框架中,定时任务是实现自动化操作的重要功能,它允许开发者在特定时间点或按照预设周期执行任务。Spring提供了两种主要的方式来配置定时任务:基于XML和基于Java-config的配置方式。 首先,我们来详细了解...
Spring 3.0引入了重大改进,弃用了基于`java.util.Timer`的定时器,并引入了`org.springframework.scheduling.concurrent`包,主要基于`java.util.concurrent.ScheduledExecutorService`实现定时任务。新的定时器...