2017-03-05 69 views
0

我在我的application.properties中有以下內容;@注入應用程序屬性的值

spring.datasource.username=${USERNAME} 
spring.datasource.password=${PASSWORD} 
spring.datasource.url=${DB_URL} 
... 
twitter.consumer.key=${CONSUMER_KEY} 
twitter.consumer.secret=${CONSUMER_SECRET} 
twitter.access.key=${ACCESS_KEY} 
twitter.access.secret=${ACCESS_SECRET} 

當應用程序推送到heroku實例時,前三個屬性由環境設置。然後使用由環境設置的值來連接特定於該環境的數據庫。這很好。

問題出在最後四位。由於這些都是敏感信息,我需要它們也被環境注入。然後我使用自動裝配將這些添加到彈簧引導組件。

@Value("${twitter.consumer.key}") 
private String consumerKey; 
@Value("${twitter.consumer.secret}") 
private String consumerSecret; 
@Value("${twitter.access.key}") 
private String accessKey; 
@Value("${twitter.access.secret}") 
private String accessSecret; 

現在,當我構建應用程序,報告說的是無法解決的ACCESS_KEY等,因爲我沒有我的本地機器上這些環境變量。

Could not resolve placeholder 'CONSUMER_KEY' in string value "${CONSUMER_KEY}" 

如何在不明確設置這些值的情況下構建應用程序?例如,有沒有爲應用程序屬性設置默認值的方法,如果它們無法解析?

回答

1

爲防止構建失敗,如果無法解析密鑰,可以爲應用程序屬性指定默認值。例如;

twitter.consumer.key=${CONSUMER_KEY:fallback} 
twitter.consumer.secret=${CONSUMER_SECRET:fallback} 
twitter.access.key=${ACCESS_KEY:fallback} 
twitter.access.secret=${ACCESS_SECRET:fallback} 
1

隨着@Value annotiation有可能設置的默認值:

@Value("${my.property:default}")