我使用以下方式设置属性:
<context:property-placeholder location="#{ T(System).getenv().get('DEV_PROPERTIES') ?: 'classpath:/META-INF/properties/config.properties' }"/>
我可以访问属性:
@Value("${hostname}")
String hostname;`
这很好用。
但是,我想使用属性映射访问属性,或者只是在不能使用@Value
变量的方法中获取值。有没有办法可以使用<context:property-placeholder />
注入属性bean集。?
环境无法访问属性文件中设置的属性,它只能从系统和环境属性中读取属性。
答案 0 :(得分:0)
否您无法访问property-placeholder
内部使用的属性。你可以做的是将属性加载到Properties
对象中并将其注入property-placeholder
并将其注入任何你喜欢的内容。
您不需要使用SpEL在location
属性中实现所需的另一个提示,一个简单的占位符就可以解决问题。
要加载属性对象,请使用util
命名空间。
<util:properties id="props" location="${DEV_PROPERTIES:classpath:/META-INF/properties/config.properties}" />
<context:property-placeholder properties-ref="props" />
要使Environment
可以使用的属性,您应该在@PropertySource
类上使用@Configuration
注释。
@Configuration
@PropertySource("${DEV_PROPERTIES:classpath:/META-INF/properties/config.properties}")
public class ApplicationConfig { ... }
您可以将此作为bean添加到xml文件中,也可以在组件扫描时检测到它。无论哪种方式都应该有效。