2016-02-23 21 views
1

我有@SprintBootApplication註釋的配置類,以及application.properties file在我的類路徑(resources/application.properties)與價值的根目錄下讀取不能讓春@Value地產注入工作

jmx.rmi.host="localhost" 

然後我有一個單獨的這樣定義的組件嘗試@Value注入這樣

@Component 
class Props { 

    private Map props = [:] 
    boolean jmxEnabled 
    String host 

    @Autowired //test inject the env 
    Props (Environment env) { 
     jmxEnabled = env.getRequiredProperty("org.softwood.jmx", Boolean.class) 
     props[jmxEnabled]=jmxEnabled 


    } 

    void setHost (@Value ('${jmx.rmi.host}') String host) { 

     assert host 
     println "set host by injection" 
     this.host = host 
     props[host] = host 
    } 

} 

,因爲我是在「」嘗試@Value我的第一個問題解決了 - GString的 - 失敗。所以轉換回'' - String和它的快樂。

在我的示例應用程序腳本 - 我得到春天的上下文,並得到一個rulesEngine bean,然後嘗試並得到我的示例Props bean。

使用autowired env的構造函數注入似乎工作。但是使用@Value主機的方法注入沒有任何效果。當我嘗試斷言時,主機爲空,而不是我預期的'localhost'。

我簡單的東西,我沒有看到它,可以在任何點什麼我做錯了

PS:我想這對核心配置類 @PropertySource ("classpath:application.properties")

,並試圖界定這豆以及

@Bean 
static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer() 
} 

很好,但沒有效果,我仍然使用獲得方法注入空@Value

任何幫助將受到歡迎

+0

把它的制定者不會做任何事情,只需添加它的字段或構造。 –

回答

0

把註釋上的setter方法,而不是參數:

@Value('${jmx.rmi.host}') 
void setHost (String host) { 

    assert host 
    println "set host by injection" 
    this.host = host 
    props[host] = host 
} 
+0

我試着你說的,它仍然得到一個null,現在的方法看起來像@Value('$ {jm​​x.rmi.host}') void setHost(String host){...注入的env仍然可以正常工作構造函數 –

+0

是否需要另一個註釋來獲取application.properties中的@Value注入才能工作? –

+0

實際上它似乎既不是我只是斷言失敗,斷言p.host ==「本地主機」,但它顯示注入的主機值爲「本地主機」。所以注射工作,但本地主機不等於本地主機!讓我看看有什麼問題 –