通过ConfigurableApplicationContext refresh()重新加载Spring应用程序上下文是不好的做法

时间:2011-11-02 12:58:20

标签: spring tomcat refresh applicationcontext

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

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

通过

刷新spring应用程序上下文
  ((ConfigurableApplicationContext)applicationContext).refresh();

考虑不良做法

我有哪些替代方案?

1 个答案:

答案 0 :(得分:4)

可能出现的一些问题 -

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

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