web容器关闭时执行方法
第一种,添加tomcat启动与关闭事件监听
一:首先,自定义一个监听器类,并实现ServletContextListener,重写里面的contextDestroyed和contextInitialized,将需要进行的操作写在这两个方法中。
public class TomcatListener implements ServletContextListener{
/* (non-Javadoc)
* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
*/
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("tomcat关闭了..........");
}
/* (non-Javadoc)
* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
*/
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("tomcate启动了..............");
}
}
二:在web.xml中注册该监听器。注册一个监听程序涉及在web.xml的web-app元素内放置一个listener元素。在listener元素内,listener-class元素列出监听程序的完整的限定类名,如下所示:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>cn.caculate.web.action.TomcatListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
虽然listener元素的结构很简单,但请不要忘记,必须正确地给出web-app元素内的子元素的次序。listener元素位于所有的servlet元素之前以及所有filter-mapping元素之后。此外,因为应用生存期监听程序是serlvet规范的2.3版本中的新内容,所以必须使用web.xml DTD的2.3版本及以上,而不是2.2版本。
第二种,使用spring bean的销毁方法。
Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作。下面是常用的三种指定特定操作的方法:
通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;
通过<bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;
在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用;
第三种,使用jvm的钩子(hook)
应用场景:某个程序发起了N个线程循环不停做某些事情,正常情况下这些线程需要被安全的停止方可保证数据不丢失,如果停电的情况那就没辙,那么有时候需要关闭服务器,那么如何让jvm告诉其内部的程序现在要关闭了呢?答案是使用钩子(hook)
某个线程需要向jvm注册钩子,让jvm在停止的时候通知它,做法是:
WorkThread extend Thread{
class ShutdownCallbackThread extends Thread{
public void
run(){flag=false;}//设置关闭筏值
}
private boolean
flag=true;
public void run(){
//regist
hook
ShutdownCallbackThread hook = new
ShutdownCallbackThread();
Runtime.getRuntime().addShutdownHook(hook);
while(flag){
....working;
}
}
}
上一篇: 过滤HTML
下一篇: js监听关闭页面,关闭页面时执行操作
推荐阅读
-
关闭浏览器网页时电脑出现卡屏现象的解决方法
-
如何关闭打开文件时提示的安全警告?打开文件安全警告取消四大方法详解
-
解决maven执行命令时提示:cached in the local repository的解决方法小结
-
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
-
PHP大批量数据操作时临时调整内存与执行时间的方法
-
web前端页面生成exe可执行文件的方法
-
360浏览器启动时为上次未关闭的页面的设置方法
-
pycharm在调试python时执行其他语句的方法
-
C#中窗口关闭时没有取消事件订阅导致事件重复执行的解决方法
-
打开UltraEdit时自动加载上次文件关闭方法