@Value用于注入的应用程序属性

时间:2017-03-05 11:49:02

标签: java spring heroku spring-boot

我的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}"

如何在不明确设置这些值的情况下构建应用程序?例如,如果无法解析应用程序属性的某些默认设置方法吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

使用@Value注释可以设置默认值:

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