Struts 2 的专栏
很高兴能够帮助大家!
Web中的定时操作
1 什么是定时操作
有些时候我们想做一些在将来的事件内发生的事情的预订,例如,9月18号自动弹出警告,每周五自动查毒等,这都叫做定时操作。
2 普通的定时操作
在普通的开发环境中,定时操作的处理非常简单,可以使用操作系统自带的task功能来完成。当然最多还是做一个服务,服务中做一个定时器Timer对象,每当Timer被触发的时候做一些相关的操作。
3 Web中的定时操作
常见的Web定时操作,以定时发送mail为例,假如系统要求能够向系统输入一个特定的将来的事件,在这个事件我们向对应的目标mail地址发送一封按照某个模板生成的mail。我们这里不分析发送mail的细节,我们只讨论怎么定时的发送mail。
3.1 Web应用程序的特点
Web应用程序运行在一个特定的web容器中,例如Tomcat或者Websphere,我们这里不WebSphere,Weblogic这些重量级的服 务器,应为这些服务器已经提供了功能非常强大的定期功能,只需要你去看文档照着操作就好了,这里我们主要讲解如何在开源类库的支持下完成这些操作。
上面说了Web应用程序运行在Web容器中,那么Web容器停止服务器之后,Web应用程序也就停止了,所以定时器不需持久化,即定发生的任务必须保存在数据库中。
我们回头考虑上面提到的定时发送mail的需求,那么就必须讲定时发送mail的记录保存在数据库中,那么需要把那些跟定时操作相关的信息保存在数据库中 呢?首先肯定是定时发送mail的时间,这个是肯定的,但是还有没有其他内容呢,对了,还需要一个关联的信息,如何通过这个定时记录联系到具体的业务。例 如这里需要有一个客户id字段,这样子才能联系到对应的客户。
3.2 如何定时发送
Web应用程序有一些特殊的接口,例如:Listener,这个接口的实现类在Web应用程序启动的时候会第一时间启动,而不需要用户通过IE等浏览器点 击操作。所以这个类是启动Timer的最佳位置。那么Timer其中之后放在哪里呢?放在Web应用程序的一个叫做Application的范围之内 (ServletContext Scope)。定时器设定完成了,这样你就可以在用户每次定义定时发送Mail的时候将定时信息放在数据库中即可,Timer会自动的遍历数据库中的内 容,发现事件匹配的时候就会调用具体的操作。
已有的Job Scheduler框架:
例如Quartz (http://www.opensymphony.com/quartz/)
1 什么是定时操作
有些时候我们想做一些在将来的事件内发生的事情的预订,例如,9月18号自动弹出警告,每周五自动查毒等,这都叫做定时操作。
2 普通的定时操作
在普通的开发环境中,定时操作的处理非常简单,可以使用操作系统自带的task功能来完成。当然最多还是做一个服务,服务中做一个定时器Timer对象,每当Timer被触发的时候做一些相关的操作。
3 Web中的定时操作
常见的Web定时操作,以定时发送mail为例,假如系统要求能够向系统输入一个特定的将来的事件,在这个事件我们向对应的目标mail地址发送一封按照某个模板生成的mail。我们这里不分析发送mail的细节,我们只讨论怎么定时的发送mail。
3.1 Web应用程序的特点
Web应用程序运行在一个特定的web容器中,例如Tomcat或者Websphere,我们这里不WebSphere,Weblogic这些重量级的服 务器,应为这些服务器已经提供了功能非常强大的定期功能,只需要你去看文档照着操作就好了,这里我们主要讲解如何在开源类库的支持下完成这些操作。
上面说了Web应用程序运行在Web容器中,那么Web容器停止服务器之后,Web应用程序也就停止了,所以定时器不需持久化,即定发生的任务必须保存在数据库中。
我们回头考虑上面提到的定时发送mail的需求,那么就必须讲定时发送mail的记录保存在数据库中,那么需要把那些跟定时操作相关的信息保存在数据库中 呢?首先肯定是定时发送mail的时间,这个是肯定的,但是还有没有其他内容呢,对了,还需要一个关联的信息,如何通过这个定时记录联系到具体的业务。例 如这里需要有一个客户id字段,这样子才能联系到对应的客户。
3.2 如何定时发送
Web应用程序有一些特殊的接口,例如:Listener,这个接口的实现类在Web应用程序启动的时候会第一时间启动,而不需要用户通过IE等浏览器点 击操作。所以这个类是启动Timer的最佳位置。那么Timer其中之后放在哪里呢?放在Web应用程序的一个叫做Application的范围之内 (ServletContext Scope)。定时器设定完成了,这样你就可以在用户每次定义定时发送Mail的时候将定时信息放在数据库中即可,Timer会自动的遍历数据库中的内 容,发现事件匹配的时候就会调用具体的操作。
已有的Job Scheduler框架:
例如Quartz (http://www.opensymphony.com/quartz/)
- 上一篇:Dojo 快速安装
- 下一篇:第四部分 开发实例 使用Struts2开发TeamWare
-
2011-9-26 17:58 o_oand0_0 | 四级
-
1楼
ljdbluesky 2011-09-22 16:42发表[回复]
- 再详细点更好了
- 求关注
- 评论啦!
- 文章分类
- ASP.NET MVC(2)
- Grails(0)
- GWT(2)
- Java Swing(1)
- JavaFX(1)
- Maven 2(2)
- Python & Django(6)
- Seam(2)
- Struts2(43)
- Tapestry 5(2)
- 其他(4)
- 管理笔记(1)
- 软件开发思想(2)
- 阅读排行
- 使用Struts2开发Java Web应... (45290)
- 第四章 Taglib Struts标签库 (27123)
- 第八章 Result Types (22242)
- 第二章 一个简单的Login 应用程序 (15637)
- 第一章 Struts2 概览 (15499)
- 第三章 Struts配置(第三~七节其他... (11929)
- 第三章 Struts配置(第一节 str... (9211)
- 第三章 Struts配置(第二节 Act... (8374)
- Struts2 校验(XML配置校验) (8359)
- 第十五章 AJAX JQuery (8169)
- 评论排行
- 最新评论
- 基于分库分表的Hibernate实现
yulehappyboy:楼主可以举一些例子吗?例如把相关案例发表在文章里面、不然太空旷了、有很多的不清楚…呵呵、
- 第一章 Struts2 概览
huiyueshuangxing:写得非常的好,值得欣赏
- Web中的定时操作
ljdbluesky:再详细点更好了
- 使用Struts2开发Java Web应用程序(目录)
you0630:非常感谢,好东西就是要顶起
- 第十二章 集成iBatis
liu_dou:顶你个费~~
- 第一章 Struts2 概览
ysj2011:向您学习,写的很好啊
- 基于分库分表的Hibernate实现
tbjtt301: "分库使用shard实现," 怎么做呢
- 第八章 Result Types
studentid:恩。学到了额。
- 第一章 Struts2 概览
dongxiukun:很给力 我喜欢
- Shopping Mall 的诞生! 使用Struts 2,MyBatis,JQuery开发Web应用程序!
Bucher03:楼主威武
- Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>blog comments powered by Disqus
需要这个:quartz-1.6.2.jar下面是触发器配置文件,把该文件引用到application.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <!-- 定时器配置 --><!-- 配置定时器类 --> <bean id="triggerUtil" class="com.pro.base.util.TriggerUtil" > </bean> <!-- 指定任务(方法) --> <bean id="expDataBaseJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref local="triggerUtil" /> </property> <property name="targetMethod"> <value>expDataBase</value> </property> </bean> <!-- 设定计划执行时间 --> <bean id="expDataBaseTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref local="expDataBaseJob" /> </property> <property name="cronExpression"> <value>00 33 21 * * ?</value> </property> </bean> <!-- 任务执行器配置 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="expDataBaseTrigger" /> </list> </property> </bean></beans>Java类:public class TriggerUtil { @Resource(name = "basicService") private BasicService service; //数据库操作服务 private TriggerUtil(){ } public void expDataBase(){ System.out.println("trigger actived........"); System.out.println("=========================="+service+""); String command="exp "; } public BasicService getService() { return service; } public void setService(BasicService service) { this.service = service; }}
http://zhidao.baidu.com/question/323394715.html