2017-03-05 80 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}")