在Java中,我可以动态地向classpath添加内容并加载类("动态"意味着不重新启动我的应用程序).是否有一个已知的框架/库来处理模块的动态加载/卸载而不重启?
通常的设置,特别是对于web应用程序,是负载均衡器,几个应用程序实例,以及逐步部署和重新启动新版本.我正在寻找其他东西 - 具有多个服务/插件的应用程序,可能是单实例桌面应用程序,其中禁用单个服务很便宜,但是关闭或重新启动完整的应用程序是不可行的.
我正在考虑典型的插件基础结构,可以在不重新启动应用程序的情况下升级或安装插件.我是否必须从头开始编程,或者已经有可用的东西?Spring兼容和开源是一个优点,但不是一个要求.
您可以考虑在OSGI框架中运行spring应用程序.
我相信DMServer是一个基于模块的Java应用服务器,旨在运行基于OSGI的企业Java应用程序和Spring驱动的应用程序
您可以在此Hello,OSGi,第2部分:Spring动态模块简介中找到更多详细信息,特别是如何使用Spring DM在正在运行的系统中动态安装,更新和卸载模块.
注意:当您谈到"可以在不重新启动应用程序的情况下升级或安装插件"时,OSGI是第一个想到的候选框架.
这完全是关于将应用程序模块化为更小的捆绑包.
每个bundle都是一个紧密耦合,可动态加载的类,jar和配置文件集合,它们明确声明了它们的外部依赖关系(如果有的话).