有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Tomcat:热部署新JAR

你能在Tomcat 5上热部署JAR文件吗?这样做的目的是避免重新启动Tomcat,并且仍然能够(通过反射)从新添加的JAR加载一些类。 能做到吗?怎样对于生产系统来说这是不明智的吗? 谢谢

编辑:我的场景需要添加新的JAR文件,这些文件的名称事先不知道。服务器是否可以“监视”JAR目录,而不是特定的JAR


共 (1) 个答案

  1. # 1 楼答案

    Tomcat不提供任何机制来重新加载单个罐子。但是,可以重新加载整个上下文

    你只需要告诉Tomcat在上下文中注意你的JAR。xml,就像这样

    <?xml version="1.0" encoding="UTF-8"?>
    <Context override="true" swallowOutput="true" useNaming="false">
      <WatchedResource>WEB-INF/web.xml</WatchedResource>
      <WatchedResource>WEB-INF/lib/your.jar</WatchedResource>
      <Manager pathname=""/>
    </Context>
    

    我们在生产中这样做。Tomcat以前有一些内存泄漏,但我们没有发现Tomcat 5.5或更高版本有任何问题

    不知道是否还有必要。我们必须进行以下调用,以避免在热部署期间发生内存泄漏

       public void contextDestroyed(ServletContextEvent sce) {
            // To fix the known memory leaks during re-deploy
            ClassLoader contextClassLoader = 
                Thread.currentThread().getContextClassLoader();
            LogFactory.release(contextClassLoader);
    
            java.beans.Introspector.flushCaches();
            ...
       }