3

我们有一个托管在共享 tomcat 实例上的 Spring 应用程序。

有时我们必须重新加载 spring 应用程序上下文但不想重新启动 Tomcat 服务器,因为其他应用程序也托管在那里。

正在通过刷新 springs 应用程序上下文

  ((ConfigurableApplicationContext)applicationContext).refresh();

被认为是不好的做法

我有什么选择?

4

1 回答 1

5

可能出现的几个问题——

首先, refresh()应该销毁当前存在于上下文中的所有 bean(单例等)并重新创建它们,因此任何可能发生的引导都会再次发生(您放入InitializingBeanbean 等的东西)。这对您来说是一个更大的问题,以确保您编写的所有初始化代码都可以安全地再次执行。

另一件需要关注的事情是刷新将如何影响永久内存生成(permgen)。由于 spring 可以(并且将)代理类并创建动态运行时类,这可能被证明是资源泄漏,因为 bean-factory 在刷新上下文时可能会创建新的运行时类。

于 2011-11-02T13:05:03.173 回答