在 Java 中,我可以动态地将内容添加到类路径并加载类(“动态”意味着无需重新启动我的应用程序)。是否有一个已知的框架/库可以在不重启的情况下处理模块的动态加载/卸载?
通常的设置,特别是对于网络应用程序,是负载平衡器、多个应用程序实例以及逐步部署和重新启动新版本。我正在寻找其他东西 - 具有多个服务/插件的应用程序,可能是单实例桌面应用程序,其中禁用单个服务很便宜,但关闭或重新启动整个应用程序是不可行的。
我正在考虑典型的插件基础架构,其中可以在不重新启动应用程序的情况下升级或安装插件。我必须从头开始编程,还是已经有可用的东西? Spring 兼容和开源是一个优势,但不是必需的。
最佳答案
您可能会考虑在 OSGI framework 中运行您的 spring 应用程序.
我相信DMServer是一个基于模块的 Java 应用程序服务器,旨在运行企业 Java 应用程序和基于 Spring 的应用程序,基于 OSGI
您可以在此 Hello, OSGi, Part 2: Introduction to Spring Dynamic Modules 中找到更多详细信息文章,特别是如何使用 Spring DM 在运行的系统中动态安装、更新和卸载模块。
注意:当您谈到“无需重新启动应用程序即可升级或安装插件”时,OSGI是第一个想到的候选框架。
这一切都是关于将应用程序模块化为更小的包。
每个 bundle 都是一个紧耦合的、可动态加载的类、jar 和配置文件的集合,这些类、jar 和配置文件明确声明了它们的外部依赖性(如果有的话)。
关于java - Java中模块的动态加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/415733/