2013-07-09 34 views
2

Spring應用程序中是否有方法知道初始化完成?一旦部署了我的應用程序,我必須運行一些代碼,並且我正在搜索諸如ServletContextListener或Spring built-in events運行代碼一旦Spring應用程序成功部署

+0

你是否需要初始化整個應用程序,或者只是初始化一個特定的bean? –

+0

的確,我只需要與嵌入式數據庫連接來添加一些記錄。所以,我的一個服務的自動佈線實例。 –

回答

6

根據你對我評論的迴應,我會回覆你可以做的多件事來處理一個初始化的Spring bean。

  1. 您可以使用BeanPostProcessor。它有兩種被視爲回調的方法,我相信postProcessAfterInitialization是您感興趣的那個。BeanPostProcessor的事情是它們針對ApplicationContext中的每個bean運行,所以您需要確定只查找您有興趣應用此處理的bean。要使用BeanPostProcessor,只需將其定義爲ApplicationContext的一部分即可。
  2. 執行InitializingBean接口。它定義了由ApplicationContext調用的單個方法afterPropertiesSet。這比1號具有優勢,因爲它可以逐個bean地應用(不適用於ApplicationContext中的所有bean)。
  3. 在方法上使用@PostContstuct註釋。這個註解告訴ApplicationContext這個方法應該在bean初始化後運行。這與2號相似,因爲它是以豆爲基礎進行的。

有關ApplicationContext的回調生命週期的更多信息,請參閱this location

+0

其實我沒有豆子。一旦數據庫連接建立,我只想設置一些數據庫記錄。我可以定義一個服務或一個組件,但是在設置這個記錄後,我不需要服務/組件,我不知道將它保留在那裏是個好主意。什麼是最好的選擇來做到這一點? –

+1

您可以創建一個唯一功能是執行此操作的bean。那是我會做的。 –

+0

是的,我認爲這是最好的選擇。我可以在執行它之後刪除實例還是不必要? –

2

您可以使用

+0

我認爲一旦應用程序開始部署,就會啓動ContextStartedEvent。我會試試看。只是一個問題。我有主要背景和根環境,我如何區分它們? Hibernate連接在root-context中定義。 –

+0

我一直在尋找ContextStartedEvent,並且我讀過使用start()開始ApplicationContext時發佈的這個事件,所以我不能使用它。不管怎麼說,還是要謝謝你。 –

+0

爲什麼你不能使用它?你寫道:「初始化完成後?」 - 這應該是引發「ContextStartEvent」的地方。 – Ralph

相關問題