- 浏览: 188435 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Errorize:
一个用servlet实现导出csv文件的实例 -
wendellhu:
求monkey talk应用文档的解压密码
monkey talk应用文档 -
wendellhu:
加密的?
monkey talk应用文档 -
hugang357:
hslh22 写道不错的资源,可以使用,只是没有最大最小值的限 ...
数字微调输入框 -
hslh22:
不错的资源,可以使用,只是没有最大最小值的限制,需要自己去加逻 ...
数字微调输入框
如何在Web工程中实现任务计划调度
下面就Servlet侦听器结合Java定时器来讲述整个实现过程。要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。
我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器,示例代码如下所示(为考虑篇幅,仅提供部分代码供读者参考):
1. private java.util.Timer timer = null;
2. public void contextInitialized(ServletContextEvent event) {
3. timer = new java.util.Timer(true);
4. event.getServletContext().log("定时器已启动");
5. timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);
6. event.getServletContext().log("已经添加任务调度表");
7. }
8. public void contextDestroyed(ServletContextEvent event) {
9. timer.cancel();
10. event.getServletContext().log("定时器销毁");
11. }
以上代码中, timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000)这一行为定时器调度语句,其中MyTask是自定义需要被调度的执行任务(在我的财政数据中心项目中就是报表计算引擎入口),从java.util.TimerTask继承,下面会重点讲述,第三个参数表示每小时(即60*60*1000毫秒)被触发一次,中间参数0表示无延迟。其它代码相当简单,不再详细说明。
下面介绍MyTask的实现,上面的代码中看到了在构造MyTask时,传入了javax.servlet.ServletContext类型参数,是为记录Servlet日志方便而传入,因此需要重载MyTask的构造函数(其父类java.util.TimerTask原构造函数是没有参数的)。在timer.schedule()的调度中,设置了每小时调度一次,因此如果想实现调度任务每24小时被执行一次,还需要判断一下时钟点,以常量C_SCHEDULE_HOUR表示(晚上12点,也即0点)。同时为防止24小时执行下来,任务还未执行完(当然,一般任务是没有这么长的),避免第二次又被调度以引起执行冲突,设置了当前是否正在执行的状态标志isRunning。示例代码如下所示:
1. private static final int C_SCHEDULE_HOUR = 0;
2. private static boolean isRunning = false;
3. private ServletContext context = null;
4. public MyTask(ServletContext context) {
5. this.context = context;
6. }
7. public void run() {
8. Calendar cal = Calendar.getInstance();
9. if (!isRunning) {
10. if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
11. isRunning = true;
12. context.log("开始执行指定任务");
13.
14. //TODO 添加自定义的详细任务,以下只是示例
15. int i = 0;
16. while (i++ < 10) {
17. context.log("已完成任务的" + i + "/" + 10);
18. }
19.
20. isRunning = false;
21. context.log("指定任务执行结束");
22. }
23. } else {
24. context.log("上一次任务执行还未结束");
25. }
26. }
上面代码中“//TODO……”之下四行是真正被调度执行的演示代码(在我的财政数据中心项目中就是报表计算过程),您可以换成自己希望执行的语句。
到这儿,ServletContextListener和MyTask的代码都已完整了。最后一步就是把ServletContextListener部署到您的Web工程中去,在您工程的web.xml配置文件中加入如下三行:
<listener>
<listener-class>com.test.ContextListener</listener-class>
</listener>
当然,上面的com.test得换成您自己的包名了。保存web.xml文件后,把工程打包部署到Tomcat中即可。任务会在每晚12点至凌晨1点之间被执行,上面的代码会在Tomcat的日志文件中记录如下:
2003-12-05 0:21:39 开始执行指定任务
2003-12-05 0:21:39 已完成任务的1/10
……
2003-12-05 0:21:39 已完成任务的10/10
2003-12-05 0:21:39 指定任务执行结束
发表评论
-
12hh
2013-06-07 09:35 783fdgtg -
百度只剩1
2012-03-22 00:10 0附件 -
Timer与TimerTask入门
2011-05-24 22:52 863Java2的开发包中提供了 ... -
Timer与TimerTask实例
2011-05-24 22:51 1390今天看了一下Timer与TimerTask的用法并且在网上 ... -
web应用每晚12点定时执行程序代码实例
2011-05-24 22:50 20951、当前web应用的web.xml文件配置容器监听类com ... -
Java定时器在Web中的应用
2011-05-24 22:46 939本文实例的最终功能是每天某个时间点(如每晚22点)执行某一功能 ... -
java 导出成.csv文件的乱码问题
2011-05-19 23:54 2580已经解决因为所有页面都是用UTF-8的编码方式。本以为这 ... -
一个用servlet实现导出csv文件的实例
2011-05-19 23:49 3249Java采用反射导出CSV文件替代导出Excel p ... -
Google分页的经典案例
2011-05-05 22:26 798上一页 [1][2][3][4][5][6] ... -
Google分页的经典案例
2011-05-05 22:25 10031 、创建 Page 类, pack ... -
网络管理:openldap详解
2011-04-27 22:45 1111简介 LDAP是轻量目录 ... -
openldap的配置手册
2011-04-27 22:44 931最近一直在安装opneldap-2 ... -
slapd.conf 配置文件中的高级功能使用方法
2011-04-27 22:42 14921. 开启日志功能启用日 ... -
OpenLDAP主配置文件slapd.conf介绍
2011-04-27 22:41 1293安全起见,slapd.conf文件应该只让运行此进程的用户可读 ... -
定制你的LDAP目录的Schema
2011-04-27 22:38 1238(http://www.infoxa.com/asp/tech ... -
ubuntu 8.04上openldap的安装和使用
2011-04-27 22:36 10591、安装openldap。$ sudo apt-get ins ... -
ubuntu上部署OpenLDAP
2011-04-27 22:34 1788原文地址:https://help.ubuntu.com/co ... -
OpenLDAP中 Schema的详细介绍
2011-04-27 22:33 3163本章讲述了如何扩展用户使用的schema。本章假设阅读者已经熟 ... -
第一个JFreeChart实例
2011-01-21 00:12 2551JFreeChart的使用非常简单,我们只需要提供满 ... -
JFreeChart简介及下载、配置
2011-01-21 00:00 1768JFreeChart简介 JFreeChart是 ...
相关推荐
本文将深入探讨如何在Tomcat中实现定时任务,主要涉及的知识点包括Java的定时器(Timer)和Spring框架的TaskScheduler。 首先,让我们了解一下Java中的定时任务。在Java标准库中,有一个名为`java.util.Timer`的类...
Java定时任务是软件开发中的一个重要组成部分,特别是在服务端应用程序中,常常需要在特定时间执行某些操作,例如数据备份、清理过期数据、发送通知等。SpringBoot框架为开发者提供了便捷的方式来实现这些定时任务,...
4. **部署与测试**:项目部署在Tomcat服务器上,当服务器启动时,Quartz会自动加载数据库中的定时任务。通过监控日志或者定制的监控界面,可以观察到定时任务的执行情况,验证其是否按照预期工作。 5. **Spring的...
1. **计划任务**:大多数操作系统(如Windows、Linux)都提供了内置的任务调度器,可以用来设置定时任务。在Windows中,我们可以使用“任务计划程序”创建一个新任务来执行重启Tomcat的操作;在Linux系统中,可以...
在Servlet容器(如Tomcat)中,可以通过监听器(Listener)或者Servlet的初始化方法来创建和启动定时器,以实现在Web应用启动后自动开始执行定时任务。 此外,Java 5引入了`java.util.concurrent`包,其中的`...
我们通常写的timer都是用main方法写的定时器,但同样我们也需要根据服务器启动后定时器也启动的 定时执行任务。不过有个致命伤就是集群方面跟quartz不能比,此方法代码做参考不错,如果要用,那么这个方法在一台...
首先,我们要了解Tomcat中的定时任务通常通过Java的定时框架来实现,最常见的是Java的ScheduledExecutorService或者使用Spring框架的TaskScheduler。这两种方式都可以在Tomcat容器内创建定时任务。 1. **使用...
本文将详细介绍如何利用Apache Tomcat(一个广泛使用的Java应用服务器)与Jenkins(一个开源持续集成/持续部署工具)来创建定时任务,实现电脑自动重启以及Tomcat的开机自启动。 首先,我们需要理解Tomcat的开机自...
Java定时任务通常使用`java.util.Timer`类、`java.util.concurrent.ScheduledExecutorService`或者Spring框架的`@Scheduled`注解来实现。在`analyData`项目中,可能是使用了Spring Boot框架,利用`@Scheduled`注解...
Java中可以使用内置的`java.util.Timer`和`java.util.TimerTask`类或者更先进的`ScheduledExecutorService`来创建定时任务。定时任务会定期检查TXT文件的内容,如果文件有更新,就提取新内容并构造钉钉消息。 本地...
综上所述,"tomcat启动时定时循环执行内容(action)"涉及的是如何在Tomcat启动时通过Java原生或者Spring框架设置定时任务,实现服务器启动后的自动周期性执行。这样的功能在很多场景下都有实际的应用价值,如日志清理...
【描述】:本文将详细介绍如何配置Tomcat进行定时重启,包括Tomcat绿色版的注册为系统服务、调整内存设置、创建批处理文件和设置系统计划任务。 【标签】:“Tomcat” 【正文】: Tomcat是一款广泛使用的开源Java...
这样,我们就设置了一个定时任务,按照指定时间自动执行restart.bat,从而实现Tomcat的定时重启。 值得注意的是,这种方法适用于小型项目或者测试环境,对于生产环境,我们可能需要更复杂和灵活的解决方案,如使用...
Quartz是一个开源的作业调度框架,而Spring框架则为Java应用程序提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,将两者结合,可以在Spring管理的bean中无缝集成定时任务。 Quartz的核心概念包括Job、...
在本文中,我们将深入探讨如何使用Java和Spring Boot框架构建一个基于秒级的定时任务管理系统,同时结合layui前端UI库来提升用户体验。Spring Boot以其快速启动、简化配置和丰富的生态系统,已经成为Java开发中的...
轻松实现tomcat定时重启 首先修改jsp.bat中的两个路径,其中set JAVA_HOME后面是jdk路径,下面是tomcat路径;运行,执行注册。 然后修改tomcat.bat中的ping 127.0.0.1 -n 5(暂停时间) 最后将tomcat.bat添加的计划...
Java定时发送邮件是一种常见的自动化任务,常常用于通知、提醒或者定期报告等场景。在这个实例中,我们将探讨如何使用Java编程语言结合电子邮件服务实现一个定时发送邮件的功能。这涉及到的主要知识点包括JavaMail ...
6. **部署项目**:将项目打包成WAR文件,部署到Tomcat等Web服务器的WEB-INF目录下,启动服务器后,Quartz就会按照配置开始执行定时任务。 在给定的压缩包文件中,`META-INF`和`WEB-INF`是WAR文件的标准目录结构。`...
部署时,只需将脚本和相关的依赖文件(如Tomcat)复制到目标机器上,然后在该机器上创建相应的定时任务。 总结,定时启动Tomcat应用服务器批处理脚本是一种实用的运维工具,通过结合Windows的任务计划程序,我们...