2017-10-19 630 views
0

我有2 @Component類:AppConfig加載從使用env我通過由@BeanAppConfig加載屬性中設置領事服務器和JpaConfig屬性。因此,有2種豆:春@Order(Ordered.HIGHEST_PRECEDENCE)並不能保證春潤第一

@Bean 
@Order(Ordered.HIGHEST_PRECEDENCE) 
Void consulProperties() { 
    //setting environment... 
} 

其次在JpaConfig

@Bean 
// @DependsOn("consulProperties") 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 

    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); 
    //some more logic 

    return factoryBean; 
} 

這不無@DependsOn("consulProperties")工作。它在consulProperties之前開始啓動,當時環境還沒有設置。所有其他豆似乎都在等待consulProperties好......爲什麼?我該怎麼做錯了?它是LocalContainerEntityManagerFactoryBean - 特定的功能?如何確定一個bean首先運行而不指定@DependsOn

+1

它不是一個bean,它應該使用ApplicationContextInitializer註冊爲一個額外的'PropertySource'。 –

+0

它不能這樣做,因爲它需要具有指定url,令牌和映射consul屬性到環境屬性的邏輯。 – Daria

+0

是的,它可以。我說你需要'PropertySource'我沒有說你需要'@ PropertySource'。基本上你在'@ Bean'方法裏面做的事情應該在你自定義的'PropertySource'(或'ApplicationContextInitializer')中並且通過'Environment'註冊。 –

回答

1

嘗試物化consulProperties()豆(不是Void型)和在entityManagerFactory()方法參數注入它。