Является ли перезагрузка контекста весеннего приложения через ConfigurableApplicationContext refresh () плохой практикой - PullRequest
2 голосов
/ 02 ноября 2011

У нас есть приложение Spring, которое размещено на общем экземпляре tomcat .

Иногда нам приходится перезагружать контекст приложения Spring, но мы не хотим перезапускать сервер Tomcat, потому чтодругие приложения также размещаются там.

Обновление контекста приложения springs с помощью

  ((ConfigurableApplicationContext)applicationContext).refresh();

считается плохой практикой ?

Какие у меня есть альтернативы

1 Ответ

4 голосов
/ 02 ноября 2011

Несколько проблем, которые могут возникнуть -

Во-первых, refresh () должен уничтожить все bean-компоненты, в настоящее время живущие в контексте (синглтоны и т. Д.), И воссоздать их, поэтому может произойти любая начальной загрузкипроизойдет снова (вещи, которые вы положили в InitializingBean бобов и т. д.).Это более важная проблема для вас, чтобы убедиться, что весь инициализированный код, который вы написали, безопасен для повторного выполнения.

Еще одна вещь, за которой нужно следить, - как обновление повлияет на генерацию постоянной памяти(PermGen).Поскольку Spring может (и будет) прокси-классы и создавать классы среды выполнения «на лету», это может оказаться утечкой ресурсов, поскольку фабрика бинов, вероятно, создаст новые классы среды выполнения при обновлении контекста.

...