`

通过修改web.xml让服务器重启的问题

    博客分类:
  • java
阅读更多
通过修改web.xml让服务器重启的问题?
通过修改web.xml让服务器重启时,项目中开启的线程都不会自动的被关闭,只有你自己去传达web容器关闭事件,通知运行中的线程,让其自动关闭。这里我经常使用的是观察者模式,
代码如下:
监听web容器关闭事件,并自启动一个关闭线程来进行关闭操作,因为web容器的关闭时间是有限的。
public class WebContentClose implements ServletContextListener,Runnable {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
Thread executeCloseThread = new Thread(this);
executeCloseThread.start();
}

@Override
public void contextInitialized(ServletContextEvent arg0) {
}

private static List<IThreadClose> closeThread = new ArrayList<>();


public WebContentClose() {
}

public static synchronized void addObserver(IThreadClose o) {
        if (o == null)
            throw new NullPointerException();
        if (!closeThread.contains(o)) {
        closeThread.add(o);
        }
    }

    public static synchronized void deleteObserver(IThreadClose o) {
    closeThread.remove(o);
    }

    public void notifyObservers() {
        Object[] arrLocal;
        synchronized (WebContentClose.class) {
            arrLocal = closeThread.toArray();
        }

        for (int i = arrLocal.length-1; i>=0; i--){
        try{
            ((IThreadClose)arrLocal[i]).setShutdown();
            ((IThreadClose)arrLocal[i]).interrupted();
            } catch(Exception e){
            System.out.println("关闭线程发生错误:" + arrLocal[i].getClass().getName());
            }
        }
    }

@Override
public void run() {

notifyObservers();
}
}


具体的需要关闭的线程:
public class Pojo implements Runnable,IThreadClose {

Thread thread;

public Pojo() {
thread = new Thread(this);
thread.start();
WebContentClose.addObserver(this);
}
@Override
public void run() {
int i =0;
while(true){
                            //在未开始做任何的业务逻辑之前来做是否停止判断
if (shutdown) {
return ;
}
i++;
printThreadInfor();
System.out.println(i);
try {                            Thread.sleep(2000l);
} catch (InterruptedException e) {
}
}
}

public void printThreadInfor(){
Thread currentThread = Thread.currentThread();
System.out.println("线程id" + currentThread.getId()  + "线程名字" + currentThread.getName());
}

private boolean shutdown = false;
@Override
public void setShutdown() {
shutdown = true;
}
@Override
public void interrupted() {
if(thread == null)
return ;
thread.interrupt();
}

}


public interface IThreadClose {
//设置为需要停止
public void setShutdown();

//触发中断,自己去停止
public void interrupted();
}
分享到:
评论

相关推荐

    为tomcat服务器配置https,tomcat需要设置的server.xml与web.xml配置

    总的来说,配置Tomcat服务器的HTTPS涉及修改`server.xml`以设置SSL连接器,并可能修改`web.xml`以实现强制HTTPS。这个过程虽然稍显复杂,但对于提供安全的Web服务来说是必不可少的。通过理解这些配置,你可以更好地...

    在web.xml中配置action或.do

    - 重启Web服务器,确保所有更改生效。 - 访问`http://IP:端口/项目名/go.action`,系统应自动调用`MyAction`类进行处理,并跳转到`next.jsp`页面。 #### 四、深入理解与应用场景 - **应用场景**:这种配置方式...

    TongWeb主配置文件tongweb.xml概要说明

    `&lt;hot-deploy&gt;`元素则是用于配置热部署,它监控特定资源(如`元素内的watched-resource`属性所示)的变化,实现不重启服务器即可更新应用。 接下来,`&lt;apps&gt;`元素是整个配置的核心部分,它包含了所有部署在TongWeb...

    IntelliJ IDEA修改了mybatis mapper xml后不用重启tomcat,自动热发布 热更新 热部署.zip

    在开发Java Web应用程序时,尤其是使用Mybatis作为持久层框架的时候,经常遇到的一个问题是:当我们在IntelliJ IDEA中修改了Mapper XML文件后,需要手动重启Tomcat服务器才能看到改动的效果,这无疑降低了开发效率。...

    Web后端开发-使用Filter过滤器技术,实现访问量统计-方法二使用web.xml配置的方式

    为了使统计持久化,我们可以将访问计数器保存在数据库或文件中,以便在服务器重启后仍能保留统计数据。此外,我们还可以在Filter中添加更多的逻辑,比如区分不同类型的HTTP请求(GET、POST等)或者特定的URL路径,以...

    metro-default.xml

    6. **重启服务器**:完成修改后,别忘了重启WebLogic服务器以使更改生效。 通过以上分析和解决方案,我们可以理解"metro-default.xml"在JAX-WS Web服务部署中的关键作用,以及如何处理WebLogic 12中遇到的相关问题...

    Tomcat设置虚拟目录的方法, 不修改server.xml

    按照题目中的描述,要在不直接修改`server.xml`的情况下设置虚拟目录,可以通过在Tomcat安装目录下的`conf/Catalina/localhost`文件夹内创建一个新的XML文件(例如命名为`szdj_file.xml`)来实现。这里的`Catalina`...

    tomcat_server.xml_配置详解

    总结,`server.xml`配置文件是Tomcat的核心配置,通过调整其中的元素和属性,我们可以定制服务器的行为,满足特定的部署需求。了解并熟练掌握这些配置,对优化和维护Tomcat服务器性能至关重要。

    mycat-web.zip

    2. 修改配置文件,如conf目录下的mycat-web.xml,根据实际环境配置数据库连接、服务器监听端口等。 3. 如果需要,执行scripts目录下的初始化脚本,创建并填充MyCat-Web的数据库表。 4. 切换到bin目录,运行启动脚本...

    eclipse 创建java web项目整理文档.docx

    本文档介绍了使用 Eclipse 创建 Java Web 项目的步骤,包括安装 Apache-Tomcat 服务器、在 Eclipse 中添加服务器、创建 Dynamic Web 项目、配置 Servers、修改 Web.xml 文件、启动服务器和访问 Java Web 项目等。

    Tomcat server.xml配置文件详解

    总之,`server.xml` 文件是 Tomcat 配置的核心,通过精细调整这些元素的属性,我们可以定制化 Tomcat 服务器的行为,以满足特定的应用场景需求。理解并熟练掌握 `server.xml` 的配置是优化和管理 Tomcat 服务器性能...

    tomcat 配置文件 server.xml配置

    - **reloadable**:如果设置为true,Tomcat会监控`/WEB-INF/lib`和`/WEB-INF/classes`目录的变化,自动重新加载修改后的应用程序,无需重启服务器。 #### Host标签 `&lt;Host&gt;`标签表示虚拟主机,用于托管多个Web应用...

    tomcat server.xml配置详解

    - **reloadable**:如果设置为`true`,Tomcat会监视应用程序的`/WEB-INF/lib`和`/WEB-INF/classes`目录变化,自动重新加载更新的应用程序,无需重启服务器。 ### `host`元素 `host`元素表示一个虚拟主机,允许在同...

    tomcat下webapps防止刷新报错的静态文件

    在Tomcat服务器上部署Web应用时,我们常常会遇到一个问题:当频繁地刷新网页或进行热更新时,浏览器可能会返回404错误,提示找不到静态文件。这是因为Tomcat在更新应用时,会重新加载Web应用目录下的文件,而在这个...

    Root.xml配置的demo

    在IT行业中,尤其是在服务器部署和应用管理领域,`Root.xml` 配置文件是一个关键的元素,特别是对于Apache Tomcat这样...正确理解和配置`Root.xml`能提高服务器的可访问性和用户体验,但同时也要考虑其潜在的安全问题。

    C#读取web.config配置,建立高速缓存机制

    C#作为.NET平台上的主要开发语言,提供了丰富的API来读取web.config文件中的配置信息,并且可以通过建立高速缓存机制来优化应用程序的性能。 首先,Web.config配置文件的作用是给.NET应用程序提供一个统一的配置...

    Tomcat映射虚拟目录context配置不用重启

    - 修改后,无需重启即可生效,可以通过访问Web应用测试配置是否成功。 #### 三、在特定主机下创建独立的Context配置文件 1. **基本配置**: - 在`$CATALINA_BASE/conf/[enginename]/[hostname]`目录下创建新的...

    如何在Tomcat 7.0服务器中添加Web应用及注意事项

    在`server.xml`文件中添加上下文是一种常见的配置方法,适用于需要频繁更改或重启服务器的情况。具体步骤如下: - 打开`apache-tomcat-7.0.30/conf/server.xml`文件。 - 在`&lt;Host&gt;`元素内添加以下代码: ```xml ...

    quartz实例 自动生成 表达式 动态更新 xml文件 tomcat自动加载

    通过使用Quartz的API,我们可以读取XML文件,解析其中的Job和Trigger定义,然后在运行时添加、修改或删除这些任务,实现配置的动态更新。这通常涉及监控XML文件的变化,一旦检测到更新,立即加载新的配置并应用到...

Global site tag (gtag.js) - Google Analytics