2015-06-14 171 views
1

我試圖從環境變量設置註釋值:從環境變量中設置一個註解屬性?

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
@EnableScheduling 
class Application { 

    @Scheduled(cron = "${DB_CRON}") 
    def void schedule() { 
     ... 
    } 

    public static void main(String... args) { 
     SpringApplication.run(Application, args) 
    } 
    ... 
} 

不過,我得到以下編譯時錯誤:

Attribute 'cron' should have type 'java.lang.String'; but found type 'java.lang.Object' in @org.springframework.scheduling.annotation.Scheduled

是否有可能設置註釋這種方式,還是我需要使用其他技術,例如在屬性文件中設置值?

回答

2

你不能在groovy的java註釋中使用GStrings。你必須使用「正確的」字符串。例如。

@Scheduled(cron = '${DB_CRON}') 

注意單引號這裏。如果groovy在"引用的字符串中看到$,它會將其變成GString。這不能用java註釋完成,並且你實際上不想在這裏完成,因爲你希望你的spring屬性在這裏設置。這也是,錯誤消息在這裏試圖說的是,這裏沒有使用基本類型的字符串,而是使用了一些對象(GString)。

+0

這更接近於一個工作解決方案,但我現在遇到了一個運行時錯誤:'線程中的異常「主要」groovy.lang.MissingMethodException:沒有方法的簽名:static org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.setSystemPropertiesMode( )適用於參數類型:(java.lang.Integer)values:[2] 可能的解決方案:setSystemPropertiesMode(int),setSystemPropertiesModeName(java.lang.String)'。 **注意:**'snowch $ echo「$ db_cron」' - >'0 19 21 * * *' –

+0

請編輯該問題,提供完整的錯誤信息並跟蹤代碼中的行號和相關行數 – cfrick

+0

還有其他拋出此錯誤的代碼。我已經刪除了這些代碼,現在所有代碼都在運行。非常感謝! –

0
@Scheduled(cron = "#{systemEnvironment['ANDROID_HOME']}") 
def void schedule() { 
    ... 
} 
+0

謝謝,你讓我更靠近一步,但我現在收到另一個錯誤:http://stackoverflow.com/questions/30834309/cron-expression-must-consist-of-6-fields-found-1 -in –

+0

是的,這是不同的錯誤;)讓我看看 –

+0

如果你將這個問題標記爲「回答」 –