- 浏览: 462124 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
xbyy123:
如果底层原理是这样的话,那么太谢谢了,瞬间明白了spring事 ...
Spring事务原理 -
欢乐逗佛:
盗取一时爽,全家火葬场
java工厂模式三种 -
ananeye:
不错不错不错不错
spring 加载过程 -
ananeye:
写的浅显易懂,不错,赞一个。
Spring事务原理 -
18289753290:
我们平时好像不是这么写的。直接就是service了,servi ...
Spring事务原理
每天某个时间点(如每晚22点)执行某一功能.
首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)
如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);
schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒
由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.
要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:
public class TimerListener implements ServletContextListener {
private java.util.Timer timer = null;
private SampleTask sampleTask;
public void contextInitialized(ServletContextEvent event) {
// todo auto-generated method stub
timer = new java.util.Timer(true);
reportTask = new ReportTask(event.getServletContext());
event.getServletContext().log("定时器已启动");
timer.schedule(sampleTask, 0, 60 * 60 * 1000);
event.getServletContext().log ("已经添加任务调度表");
}
public void contextDestroyed(ServletContextEvent event) {
// todo auto-generated method stub
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
要使用此监听器需要在web.xml中配置,如下:
<listener>
<listener-class>com.gxl.TimerListener</listener-class>
</listener>
这样在web工程启动时,就会自动启动此监听器.
以上监听器中的contextInitialized方法的功能就是启动定时器,此定时器每隔一个小时执行任务.此任务类sampleTask应为java.util.TimerTask的子类,实例代码如下:
public class SampleTask {
private ServletContext context;
private static boolean isRunning = false;
private static boolean flag = true;
private static final int C_SCHEDULE_HOUR = 22;
public SampleTask(ServletContext context){
this.context = context;
}
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && flag) {
isRunning = true;
context.log("开始执行指定任务");
//TODO 此处添加自定义的详细任务
isRunning = false;
flag = false;
context.log("指定任务执行结束");
}
} else {
context.log("上一次任务执行还未结束");
}
if(C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY)){
flag = true;
}
}
}
这个类就不详细介绍了,此处的主要功能就是每晚的22点执行某一任务,类中省略.
首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)
如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);
schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒
由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.
要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:
public class TimerListener implements ServletContextListener {
private java.util.Timer timer = null;
private SampleTask sampleTask;
public void contextInitialized(ServletContextEvent event) {
// todo auto-generated method stub
timer = new java.util.Timer(true);
reportTask = new ReportTask(event.getServletContext());
event.getServletContext().log("定时器已启动");
timer.schedule(sampleTask, 0, 60 * 60 * 1000);
event.getServletContext().log ("已经添加任务调度表");
}
public void contextDestroyed(ServletContextEvent event) {
// todo auto-generated method stub
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
要使用此监听器需要在web.xml中配置,如下:
<listener>
<listener-class>com.gxl.TimerListener</listener-class>
</listener>
这样在web工程启动时,就会自动启动此监听器.
以上监听器中的contextInitialized方法的功能就是启动定时器,此定时器每隔一个小时执行任务.此任务类sampleTask应为java.util.TimerTask的子类,实例代码如下:
public class SampleTask {
private ServletContext context;
private static boolean isRunning = false;
private static boolean flag = true;
private static final int C_SCHEDULE_HOUR = 22;
public SampleTask(ServletContext context){
this.context = context;
}
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && flag) {
isRunning = true;
context.log("开始执行指定任务");
//TODO 此处添加自定义的详细任务
isRunning = false;
flag = false;
context.log("指定任务执行结束");
}
} else {
context.log("上一次任务执行还未结束");
}
if(C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY)){
flag = true;
}
}
}
这个类就不详细介绍了,此处的主要功能就是每晚的22点执行某一任务,类中省略.
发表评论
-
struts2重复提交原理
2012-11-29 09:57 1085相信都有表单提交的情况, 很多时候不希望出现重复提交原来的数据 ... -
java定时器
2012-09-07 09:51 1107在现实生活中,会出现这样的例子,比如烧水,一般烧了20分钟后, ... -
java反射机制,注解,枚举
2012-07-17 08:44 17491) 要想使用反射,首先需要获得待处理类或对象所对应的Clas ... -
java反射机制应用场景
2012-04-25 10:12 6880反射机制实现: 1)导 ... -
java面试准备
2012-01-30 12:21 909一.集合 cccccccccc 二.java 中 String ... -
java模式之 桥接模式Briage
2011-10-11 17:03 1336Bridge模式的概念 Bridge ... -
java连接池
2011-09-28 16:06 862连接池最基本的目的: 1、重用连接,节省连接资源; 2、免 ... -
java生产word文档的方法
2011-09-28 11:23 10921.jacob(windows系统) 2.通过html.vm类 ... -
ArrayList与LinkedList的区别
2011-09-06 16:33 847一般大家都知道ArrayList和LinkedList的大致区 ... -
HashMap与HashTable的区别
2011-09-06 16:26 8581 HashMap不是线程安全的 ... -
java 集合类
2011-09-06 15:56 940java.util中包含了一些集合类,常用的有List,Set ... -
临时1111
2011-08-24 00:19 843初始化 flow=1 status=0 连接查询- 主表+ ... -
List 反序输出
2011-08-16 15:45 2761java.util.Collections.reverse(L ... -
java 调色转化
2011-08-01 17:46 930// TODO Auto-generated metho ... -
java文件拷贝
2011-08-01 17:35 1841//文件拷贝 import org.apache.common ... -
Map的三种遍历方法
2011-07-14 19:29 891集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方 ... -
环境变量配置
2011-05-16 17:56 817CLASSPATH D:\jdk1.6.0_16\lib\dt ... -
jar包冲突串调问题-jar包密封
2011-04-12 17:25 3415引用 包密封 密封 JAR 文件中的一个包意味着在这个包中定 ... -
jar包详解和META-INF作用(转)
2011-04-12 17:24 2611如果我们使用 JDK 的 jar ... -
java程序读取properties配置文件中文乱码
2011-04-08 10:59 11690java 读取properties文件时,如果包含中文,那么j ...
相关推荐
Java定时器在Web应用中的实现主要涉及到`java.util.Timer`类和`ServletContextListener`接口,它们在Spring、Struts、Hibernate等框架环境下同样适用。本文将详细解释如何使用这两个核心组件来实现在Web环境中定时...
### Java定时器:掌握时间的艺术 #### 一、引言 在软件开发中,定时执行特定任务是一...无论是桌面应用、服务器端程序还是Web应用,Java定时器都能提供稳定的定时执行能力,是每个Java开发者应该掌握的重要技能之一。
总结起来,Java定时器在Web应用中的使用通常涉及到创建一个实现了`ServletContextListener`的类,通过监听器来控制定时器的生命周期,以及创建自定义的`TimerTask`子类来定义需要执行的任务。这种设计模式使得定时...
Java Web定时器主要指的是在Java Web应用程序中实现定时任务的功能,这在许多业务场景中都是必要的,例如数据备份、报表生成、邮件发送等。在Java中,我们可以利用内置的`java.util.Timer`类或者Spring框架的`@...
总结一下,Java定时器(java.util.Timer)和TimerTask配合使用,可以方便地实现定时执行任务的需求。通过结合Servlet监听器,我们可以确保定时器在Web应用启动时启动,并在应用关闭时停止,确保任务的生命周期与Web...
总结一下,Java定时器虽然简单易用,但在复杂应用中可能显得不足。Spring定时器通过提供丰富的配置选项和强大的`TaskScheduler`接口,成为企业级应用中定时任务的首选。使用Spring定时器,开发者能够更高效地管理和...
Java定时器结合Spring框架可以创建灵活且可扩展的定时任务,这种技术在许多企业级应用中非常常见,用于执行周期性的后台任务,如数据清理、报告生成或服务调用等。下面将详细介绍如何在Spring中集成Java定时器,并...
例如,在一个 web 应用程序中,可以使用定时器来计划任务,例如每天凌晨执行某个任务。在一个游戏应用程序中,可以使用定时器来更新游戏状态,例如每隔 1 分钟更新一次游戏状态。 JAVA 中的定时器提供了一种灵活的...
总结来说,Java定时器提供了一种灵活的方式来安排和管理定时任务,无论是在桌面应用还是Web应用中,都能发挥重要作用。正确理解和使用`Timer`和`TimerTask`,能够帮助开发者实现各种复杂的定时需求,如数据同步、...
在提供的Java代码片段中,`SPListener`实现了`ServletContextListener`接口,这意味着它会在Web应用启动时初始化,并在Web应用停止时销毁。在这个监听器中,创建了一个`Timer`实例,计划在每天特定时间(15:16:00)...
Web定时器组件是Java Web应用中用于执行周期性任务的关键工具。它允许开发者在特定时间间隔内自动执行某些操作,例如数据同步、日志清理、发送通知等。这些任务可以是后台运行的,不会影响用户的交互体验。在本文中...
本文将详细介绍如何使用`Timer`类结合`ServletContextListener`接口来实现在Web应用中启动并管理一个定时任务。 #### 二、Java定时器的基本概念 1. **`java.util.Timer`类**:`Timer`类是Java中用于执行定时任务的...
在Servlet容器(如Tomcat)中,可以通过监听器(Listener)或者Servlet的初始化方法来创建和启动定时器,以实现在Web应用启动后自动开始执行定时任务。 此外,Java 5引入了`java.util.concurrent`包,其中的`...
在给定的代码实例中,`TimerListen` 类实现了 `ServletContextListener` 接口,这意味着它会在Web应用启动和关闭时被调用。当Web应用启动时,`contextInitialized` 方法会被调用,从而初始化定时器。这里创建了一个 ...
Java Web定时器是一种在Web应用程序中定期执行特定任务的机制,它主要依赖于Java的`java.util.Timer`类和`java.util.TimerTask`类。在Java Web开发中,定时任务通常用于后台数据处理、定时备份、日志清理等场景。...
在提供的代码片段中,`TimerListen`类实现了`ServletContextListener`接口,这意味着它会在Web应用启动和关闭时被调用。具体来说: - `contextInitialized()`方法在应用启动时初始化一个`Timer`对象,并安排了一个...
Quartz是一款开源的作业调度...总结来说,"Quartz定时器web应用"示例展示了如何在Web环境中利用Quartz框架创建和调度定时任务。通过理解上述概念和步骤,开发者可以灵活地构建和管理定时任务,提升系统的自动化水平。