2017-09-23 102 views
0

我想在應用程序啓動期間(或者在結束時)執行一些代碼。我使用@PostConstruct批註,@EventListener(ContextRefreshedEvent.class),實現了InitializingBean,實現了ApplicationListener,我發現了一些資源。它們都在啓動時執行我的代碼,但是應用程序屬性的佔位符不會被替換爲時刻。所以如果我的類有一個具有@Value(「$ {my.property}」)註解的成員,它將返回「$ {my.property}」,而不是在yaml(或任何地方)中定義的實際值。 如何在更換髮生後完成我的代碼?在Spring啓動時執行方法

+1

春天配置將解決放在'@ Value'內的財產的佔位符。如果未加載,則表示不正確的屬性名稱,或者特定的yaml未加載到上下文中。當然你可以使用'@ PostConstuct'來設置會員 – Barath

回答

0

您可以實施InitializingBean,該方法的名稱爲afterPropertiesSet()。此方法將在所有屬性佔位符被替換後調用。

0

@PostConstruct在bean創建時被調用。 Ypu必須檢查彈簧是否找到帶有屬性的文件。

+0

使用評論或編輯 –

0

如果你有一個配置類,@Configuration,那麼你可以嘗試明確導入您的屬性文件中加入以下注釋:你的配置類和後

@PropertySource("classpath:your-properties-file.properties") 

任何其他非配置資源應加載@Value註釋應該可以正常工作。

0

你應該實現ApplicationListener<ContextRefreshedEvent>這樣的:

@Component 
public class SpringContextListener implements ApplicationListener<ContextRefreshedEvent> { 

     @Value("${my.property}") 
     private String someVal; 

     /** 
     * // This logic will be executed after the application has loded 
     */ 
     public void onApplicationEvent(ContextRefreshedEvent event) { 
      // Some logic here 
     } 
    }