我们有一个托管在共享 tomcat 实例上的 Spring 应用程序。
有时我们必须重新加载 spring 应用程序上下文,但不想重新启动 Tomcat 服务器,因为其他应用程序也托管在那里。
正在通过
刷新springs应用程序上下文 ((ConfigurableApplicationContext)applicationContext).refresh();
认为不良做法?
我有什么选择?
最佳答案
可能出现的几个问题——
首先,refresh() 应该 销毁当前存在于上下文中的所有 bean(单例等)并重新创建它们,因此任何可能发生的引导都会再次发生(你放入 InitializingBean 的东西
bean 等)。这对您来说更重要,以确保您编写的所有初始化代码都可以安全地再次执行。
另一件需要关注的事情是刷新将如何影响永久内存生成 (permgen)。由于 spring 可以(并且将会)代理类并创建即时运行时类,这可能被证明是资源泄漏,因为 bean 工厂在刷新上下文时可能会创建新的运行时类。
关于spring - 通过 ConfigurableApplicationContext refresh() 重新加载 spring 应用程序上下文是否被认为是不好的做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7980701/