spring - 通过 ConfigurableApplicationContext refresh() 重新加载 spring 应用程序上下文是否被认为是不好的做法

标签 spring tomcat refresh applicationcontext

我们有一个托管在共享 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/

相关文章:

java - 如何在 Spring boot 中手动配置 SSL 握手

php - php 提供下载后刷新

java - 向 Jersey multipart-form-data 函数添​​加注释会破坏它

java - Restful Web 服务返回 404,错误的 web.xml?

reporting-services - 如何刷新 Reporting Services 上的子报表

Android更新小部件ListView

spring - 如何在 Spring JPA 中重写 AbstractAuditingEntity 中的 @CreatedBY 值

java - 由 : javax. persistence.TransactionRequiredException 引起:在带有 Spring JTA 事务的 Weblogic 上

java - 如果邮件服务器不可用,如何防止应用程序启动失败

java - session /事务支持的最佳 Tomcat6 JNDI + Hibernate 配置