2017-01-15 7 views
0

私はSpring 4.3を使用しています。私はConfigurableApplicationContextを使用しており、close()を呼び出しています。 @PreDestroyと注釈された予期した方法が呼び出されます。ApplicationContextを閉じる

しかし、私は近くに電話していない場合でも、@PreDestroyメソッドが呼び出されていることがわかりました。 close()が呼び出されないとメモリリークの可能性があるという印象を受けました。私が間違っている?

また、Webアプリケーションを使用している場合、applicationcontextを閉じる正しい方法は何ですか、regsiterShutdownHook?

+2

をして、コンテキストを作成するために、通常の方法を使用する(すなわち'ContextLoaderListener'と' DispatcherServlet'を使用してください)、何もする必要はありません。すべてが処理されることを心配してください。 –

+0

ありがとう、私はあなたのポイントをWebアプリケーションの場合は理解しています。クエリの最初の部分は単純なアプリケーションに関連し、2番目はWebアプリケーションに関連しています。単純なアプリケーションでは、あなたの意見を共有してください –

+2

シャットダウンフックを登録するのが最も簡単です。コンテキストの構築を実際に制御している場合は、両方を実行してください...または、アプリケーションのタイプに関係なく、 。 –

答えて

1

あなたがシャットダウンフック登録することができます次のいずれかの

ConfigurableApplicationContext context = SpringApplication.run(Test.class, args); 
context.registerShutdownHook(); 

または何かをするために、リスナーを追加:あなたは、Webアプリケーションを使用している場合

ConfigurableApplicationContext context = SpringApplication.run(Test.class, args); 

    context.addApplicationListener(new ApplicationListener<ContextClosedEvent>() { 

     @Override 
     public void onApplicationEvent(ContextClosedEvent event) { 
      // some logic 
     } 
    }); 
関連する問題