我正在尝试找到一种方法在我的 Spring Boot 1.5 应用程序中执行以下操作。
我有一个变量,其值是动态的,这意味着它来自外部系统。
字符串名称 = "abc";//从外部设置
我想尝试使用名称的值来查找我的属性文件并查看是否定义了匹配的属性。类似的东西..
@Value("#{myClassName.name.concat('something')}") 字符串属性值;
现在我的 application.property 文件具有以下属性集 假设 name 的值为“abc”
属性文件内容:
abc.something:abcValue
现在,当我尝试访问变量 propertyValue
的值时,它会被设置为值 abc.something
而不是 abcValue
。
我可能认为我不能将 @Value
与 #{}
一起使用来实现这一点,我想知道是否有办法使用 #{ }
在 ${}
内,以便我在使用 #{}
计算属性名称后获取属性值。
如果您需要更多详细信息,请告诉我。
最佳答案
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;
关于spring - 在 Spring 和 SPeL 中使用 @Value 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45020151/