gpt4 book ai didi

java - 从远程位置动态加载 jar

转载 作者:行者123 更新时间:2023-11-28 22:19:39 28 4
gpt4 key购买 nike

是否有针对以下场景的框架或一些解决方案。

我有一个在 Tomcat 服务器上运行的 Web 应用程序。启动我的应用程序时,我想下载一些位于完全不同的地方的 jar 。像外部连接服务器之类的。在那些 jar 里是我所有需要用 spring 注入(inject)的业务逻辑。

为什么我想要这样的东西?我的应用程序安装在很多不同的位置。为了在所有安装中轻松获得最新版本的代码,我只想更新 1 个位置,并且所有应用程序在重新启动后都会更新。

最佳答案

您的应用程序需要使用自定义 ClassLoader做这个。

好消息是您不必自己编写:您可以使用 Java 的内置 java.net.URLClassLoader .坏消息是您必须将它连接到 Tomcat,这可能需要一些代码。

这是一个未经测试的建议:

  1. 写一个ClassLoader扩展 Tomcat 的 WebappClassLoader
  2. 添加 URLClassLoader成员并在您的构造函数中初始化它(或 LifecycleListener 事件之一,如 start() )
  3. 覆盖所有方法以调用具有相同签名的父类(super class)方法,并在您正在使用的 URLClassLoader 中调用相同的方法。您咨询的顺序super.whateverurlClassLoader.whatever由您决定:阅读 servlet 规范以确定您想如何做事
  4. 安装您的自定义 ClassLoader通过定义 <Loader>在您的 Web 应用程序的 META-INF/context.xml文件。

前往 Tomcat users' mailing list如果您在上述任何方面需要帮助。

编辑 2014-11-04

请注意,我认为使用 URLClassLoader做这种事情很脆弱,容易出错,而且可能是个坏主意。相反,修复您的部署过程,以便更容易地跨集群更新您的 Web 应用程序。您可以使用 Tomcat 的“farm web deployer”来完成此类任务,或者使用其他一些解决方案。但是通过网络加载类可能会使您的生活复杂化,并在某些情况下导致一些奇怪的不可重现的行为。

关于java - 从远程位置动态加载 jar ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26738227/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com