3

共有TomcatインスタンスでホストされているSpringアプリケーションがあります。

Springアプリケーションコンテキストをリロードする必要があるが、他のアプリケーションもそこでホストされているため、Tomcatサーバーを再起動したくない場合があります。

さわやかなスプリングアプリケーションコンテキストを介して

  ((ConfigurableApplicationContext)applicationContext).refresh();

悪い習慣と見なされますか?

どのような選択肢がありますか?

4

1 に答える 1

5

発生する可能性のあるいくつかの問題-

まず、refresh()は、コンテキストに現在存在するすべてのBean(シングルトンなど)InitializingBean破棄して再作成する必要があるため、発生する可能性のあるブートストラップが再び発生します( Beanに入れたものなど)。これは、作成したすべての初期化コードが安全に再実行できるようにするための、より大きな問題です。

注目すべきもう1つの点は、更新が永続的なメモリ生成(permgen)にどのように影響するかです。Springはクラスをプロキシしてオンザフライのランタイムクラスを作成できる(そして作成する)ので、Beanファクトリはコンテキストを更新したときに新しいランタイムクラスを作成する可能性があるため、これはリソースリークになる可能性があります。

于 2011-11-02T13:05:03.173 に答える