我正试图在spring boot 1.5应用程序中找到一种方法来执行以下操作。
我有一个变量,它的值是动态的,意味着它来自外部系统。
String name = "abc"; //gets set externally
我想尝试使用名称的值来查找我的属性文件,看看是否有定义的匹配属性。类似......
@Value("#{myClassName.name.concat('something')}")
String propertyValue;
现在我的application.property文件设置了以下属性 假设name具有值" abc"
abc.something:abcValue
现在,当我尝试访问变量propertyValue
的值时,它会设置为值abc.something
而不是abcValue
。
我可能认为我无法使用@Value
与#{}
达成协议,我想知道是否有办法在#{}
内使用${}
以便我在使用#{}
计算属性名称后,转到并获取属性值。
请告诉我您是否需要更多详情。
答案 0 :(得分:2)
bean生命周期需要在编译时解析属性。因此,@Value
需要常量参数。
您可以使用Environment
bean以编程方式访问您的媒体资源。
import org.springframework.core.env.Environment;
@Service
public class Serivce {
@Autowired
private Environment environment;
public String getProperty(final String keyPart) {
String key = "build.your." + keyPart;
return environment.getProperty(key)
}
}
顺便说一句,您可以在SpEL中使用#('${spring.some.property}')
来访问占位符。
// This is valid access to property
@Value("#('${spring.some.property}')")
private String property;