【问题标题】:Dynamically loading or replacing jars in a Webcontainer (Tomcat)在 Web 容器 (Tomcat) 中动态加载或替换 jar
【发布时间】:2013-08-04 20:53:51
【问题描述】:

我的问题其实很简单,虽然答案可能很复杂。是否可以在运行时动态加载 jar,甚至替换 web 容器上下文中已经加载的 jar?在这个特定的案例中,我对 Tomcat 和 Spring MVC 的组合很感兴趣,但我猜该技术(如果有的话)将适用于其他技术堆栈。

如果问题的答案是肯定的,那么紧随其后的问题是:哪种方法最直接?我知道 OSGi,我很确定它可以在 web 容器中动态加载 jar,但我认为这是一个重量级的解决方案。

【问题讨论】:

    标签: java spring tomcat spring-mvc web-container


    【解决方案1】:

    我不确定 JAR 是如何准确加载的,但您可以在运行时动态加载任何类。如果您对 JAR 中包含的类感兴趣,那么可以使用类加载器加载这些类。或者更具体地说是一个 JAR 类加载器 JarClassLoader Class

    如果您尝试替换 JAR,该方法可能是替换从该 JAR 加载的类,唯一的方法是如果对这些类中的每一个的引用都是“垃圾收集”。此时您可以从新位置加载相同的类。Class Unloading

    和你的问题类似How Should I load Jars dynamically at run-time?

    【讨论】:

    • 是的,我知道我们可以在运行时动态加载类,但我的问题是针对 web 容器内的动态类/jar 加载,例如 tomcat。你认为这仍然可以在一个内部工作吗?
    • “JarClassLoader”类在从 Web 容器内部调用时会起作用吗?我不得不猜是的。它的唯一目的是在运行时动态地从 Jar 文件中加载资源。它是“ClassLoader”的一个遥远的子类,绝对可以在 Web 容器中工作。
    • 添加到我刚刚在上面添加的评论中,Tomcat 使用了类加载器本身。如果您使用 JarClassLoader 类或任何其他类加载器,它应该很容易用几行代码进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多