java中服务器启动时,执行定时任务
package com.ripsoft.util; import java.util.Calendar;
import java.util.Timer; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class TimerListener implements ServletContextListener{
private Timer timer = null; @Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event.getServletContext().log("定时器已启动"); //设置执行时间
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);//每天
//定制每天的11:00:00执行
calendar.set(year, month, day, 11, 00, 00);
java.util.Date date = calendar.getTime();
int period = 30 * 1000;
//每天的date时刻执行TestTask,每隔30秒重复执行
timer.schedule(new TestTask(), date, period);
//每天的date时刻执行TestTask, 仅执行一次
//timer.schedule(new TestTask(), date);
} @Override
public void contextDestroyed(ServletContextEvent event) {
if (timer != null) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
}
package com.ripsoft.util; import java.util.TimerTask; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class TestTask extends TimerTask{
protected final Log logger = LogFactory.getLog(getClass()); private static boolean isRunning = false; @Override
public void run() {
if (!isRunning) {
isRunning = true;
logger.info("开始执行任务。"); int i = 0;
while (i++ < 10) {
logger.info("已完成任务的" + i + "/" + 10);
} isRunning = false;
logger.info("任务执行结束。"); } else {
logger.info("上一次任务执行还未结束,本次任务不能执行。");
} }
}
1.TestTimerListener.java执行定时任务,实现servlet的ServletContextListener接口,当服务器启动时开始执行TestTask任务
2.想要任务在服务器启动时定时执行,就要借助监听实现需要在web.xml中做如下配置
<listener>
<listener-class>com.ripsoft.util.TimerListener</listener-class>
</listener>
java中服务器启动时,执行定时任务的更多相关文章
- Servlet的init()方法如何才会在服务器启动时执行
如果要想让 servlet 的 init () 方法在服务器启动 时就被执行,则需要在 web.xml 中相应的 servlet 下配置 <servlet > <servlet -n ...
- 服务器启动完成执行定时任务Timer,TimerTask
由于项目需求:每隔一段时间就要调外部接口去进行某些操作,于是在网上找了一些资料,用了半天时间弄好了,代码: import java.util.TimerTask; public class Accou ...
- Spring在Web容器启动时执行初始化方法
需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法 ...
- [转帖]postgresql 在等待服务器启动时超时
postgresql 在等待服务器启动时超时 2018年12月24日 :: my_name_nb 阅读数 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接 ...
- apache服务器启动时提示httpd: apr_sockaddr_info_get() failed for
apache服务器启动时提示httpd: apr_sockaddr_info_get() failed for 在RedHat Linux 5 与 CentOS 5服务器上配置好apache后,启动或 ...
- java中如何生成可执行的jar文件
java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$ ...
- Spring Web项目spring配置文件随服务器启动时自动加载
前言:其实配置文件不随服务器启动时加载也是可以的,但是这样操作的话,每次获取相应对象,就会去读取一次配置文件,从而降低程序的效率,而Spring中已经为我们提供了监听器,可监听服务器是否启动,然后在启 ...
- Linux开机启动时执行脚本的方法
方法 1 – 使用 rc.local利用 /etc/ 中的 rc.local 文件在启动时执行脚本与命令.我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本.不过我们首先需要为 /et ...
- 在web项目启动时执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
随机推荐
- 在MAC中安装Compass的方法 (转)
在MAC中通过gem命令安装compass时会出异常,原因是compass版本更新了,一些运行时所用到的依赖软件的版本没能得到更新,故而出现错误.例如,用以下命令安装compass: $ gem in ...
- IE9、 Firefox、Safari, Chrome的CSS3圆角属性
这篇文章主要是记录一下,微软最新发布的 IE9 浏览器CSS 圆角属性,现在CSS3已经 可以轻松实现跨浏览器的圆角效果,包括Firefox高版本,IE9,Safari,Chrome等高端 浏览器. ...
- 为tomcat启用nio机制
tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态. ...
- java修改远程服务器密码
积累: 1. echo 用户名:新密码 | chpasswd
- 总结: Struts2 + Spring 的线程安全问题
1. 首先Struts2 本身是安全的 其原理大概是:Strtus2会获取到用户的http请求,然后负责给每个请求实例化一个Action 对象,但是大家注意,这里的action对象和Struts1里面 ...
- javascript的族家族史
JavaScript 实现 完整的 JavaScript 实现是由以下 3 个不同部分组成的:ECMAScript.文档对象模型.浏览器对象模型.这也就是说 cocos2d-js 中 其实我们用的是 ...
- 浅析Android的窗口
一.窗口的概念 在开发过程中,我们经常会遇到,各种跟窗口相关的类,或者方法.但是,在 Android 的框架设计中,到底什么是窗口?窗口跟 Android Framework 中的 Window 类又 ...
- Android-加载透明PNG图片变黑的问题
png和jpg作为两种最常用的图片格式,首先我们要知道他们的区别: 1.从一般图片的外观上来说,他们是无法直接判断的 2.从文件大小上来说,同样一张图png肯定比jpg的大 3.通过查资料咱们可以发现 ...
- 将Sublime Text3添加到右键菜单中
卸载了Sublime Text2,安装了最新版本的Sublime Text3,不过一直不在右键菜单中,每次使用都需要从打开方式中选,所以决定添加,有如下2种方法. 添加到右键菜单 方法一(推荐) 在S ...
- .NET程序内,访问私有或者保护成员的技巧
如果是C++,我们可以计算对象内成员的位置,然后偏移指针以访问类型的所有非公开成员.但是.NET对象完全受GC管理,地址根本无法得到,并且也无法通过指针调用方法. 当然... 这是一种很不值得推荐的技 ...