是否存在以下方案的框架或解决方案。
我在Tomcat服务器上运行了一个webapp。在启动我的应用程序时,我想下载一些位于完全不同的罐子。像外部nexus服务器或东西。在那些罐子里,我的所有业务逻辑都需要注入弹簧。
为什么我想要这样的东西?我的应用程序安装在很多不同的位置。要在所有安装中轻松获得最新版本的代码,我希望只需更新1个位置,所有应用程序在重新启动后都会更新。
答案 0 :(得分:1)
您的应用需要使用自定义ClassLoader
来执行此操作。
好消息是您不必自己编写:您可以使用Java的内置java.net.URLClassLoader
。坏消息是你必须将它连接到Tomcat,这可能需要一些代码。
这是一个未经测试的建议:
ClassLoader
WebappClassLoader
URLClassLoader
成员并在您的构造函数中初始化(或LifecycleListener
之类的start()
事件之一super.whatever
或urlClassLoader.whatever
的顺序取决于您:阅读servlet规范以确定您希望如何执行操作ClassLoader
文件中定义<Loader>
来安装自定义META-INF/context.xml
。如果您需要任何上述帮助,请前往Tomcat users' mailing list。
编辑2014-11-04
请注意,我认为使用URLClassLoader
来做这类事情是脆弱的,容易出错,可能是一个坏主意。相反,请修复部署过程,以便更轻松地在群集中更新Web应用程序。您可以使用Tomcat的“farm web deployer”执行此类任务,或使用其他解决方案。但是,通过网络加载类可能会使您的生活变得复杂,并在某些情况下导致一些奇怪的不可重现的行为。
答案 1 :(得分:0)
通常,这是在部署期间使用rsync
脚本或其他类似脚本将部署工件分发到群集中完成的。
您可以将Tomcat提供的WebappClassLoader配置为从远程位置加载。