一尘不染

通过ConfigurableApplicationContext refresh()重新加载Spring应用程序上下文是否被认为是错误的做法

tomcat

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

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

是否正在通过刷新Spring应用程序上下文

  ((ConfigurableApplicationContext)applicationContext).refresh();

认为是 不良做法

我有什么选择?


阅读 657

收藏
2020-06-16

共1个答案

一尘不染

可能出现的一些问题-

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

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

2020-06-16