2013-01-16 113 views
1

所以,我有一个是要反映我的应用程序运行在什么环境的环境特性。Java的春天@Value注释和参数

@Value("${environment}") 
private String environmentName; //This will be set as sandbox, staging, production 

我也有一个功能标志(功能称为“superFeature .enable')应该基于什么样的环境中应用已经部署在中设置。

//Config file 
superFeature.enable.sandbox=true 
superFeature.enable.staging=false 
superFeature.enable.production=false 


//@Service annotated class containing call to configuration 

@Value("${superFeature.enable.{environment}:false}") 
private boolean isSuperFeatureEnabled; 

此刻,当我在沙箱环境中运行我的应用程序,isSuperFeatureEnabled永远是假的。我的语法对于上面的代码片段是否正确?有什么我失踪?

回答

0

你不应该已经把

@Value("${superFeature.enable.{environmentName}:false}") 

呢? 这只是一个猜测,恐怕。它看起来像一个不一致的地方。但是,我不知道上面这两个语句在哪个上下文和顺序中被执行,所以我不知道哪些变量是已知的。 我建议先获取更多信息。就像,如果您将{environment}替换为您的环境的预期字符串,会发生什么情况,您是否可以在该代码中获取代码中的环境值。我不知道是否甚至有可能有这种双重间接。

+0

所以,你的建议是,我应该通过在Java变量(environmentName)的名称,而不是名称配置(环境)? – GobiasKoffi

0

应该是以下(环境还封闭占位符语法内开始以$):

@Value("${superFeature.enable.${environment}:false}")