spring:从<context:property-placeholder> </context:property-placeholder>设置访问属性

时间:2015-01-25 02:14:57

标签: java spring properties

我使用以下方式设置属性:

<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集。?

环境无法访问属性文件中设置的属性,它只能从系统和环境属性中读取属性。

1 个答案:

答案 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文件中,也可以在组件扫描时检测到它。无论哪种方式都应该有效。