java.util.Properties:如何从spring config xml中的Properties中检索值

时间:2016-02-24 13:42:57

标签: java spring properties configuration

我有一个java.util.Properties对象,其中包含很少的键值对。我试图在spring配置文件中使用这个Property对象,即在spring配置中定义键,在运行时,它应该从属性对象中获取值。

例如:

<bean id="test" class="com.sample.Test">
    <constructor-arg value="${PROPERTY_KEY} />
</bean>

现在,在运行时,构造函数应该获取Property对象中存在的值。

有没有办法完成这项工作?

注意:我不想在这里使用config.properties。希望使用java.util.Properties

谢谢, 拉胡

4 个答案:

答案 0 :(得分:0)

 <context:property-placeholder location="classpath:placeholder.properties"/>

<bean id="properties"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location" value="classpath:<file-name>.properties" />

</bean>

答案 1 :(得分:0)

首先,你必须创建bean来访问你的属性文件,如下面的

<bean id="appProperties"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="singleton" value="true" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
            <list>
          <value>classpath*:localhost-mysql.properties</value>
          <value>classpath*:mail-server.properties</value>
          </list>
    </property>     
</bean>
<bean id="placeholderConfig"    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties" ref="appProperties" />
</bean>

接下来,您可以从属性文件中访问键值对,如下所示

<bean id="mailServerSettings" class="com.ratormonitor.app.context.EmailSettings">
    <property name="host" value="${mail.server.host}" />
    <property name="port" value="${mail.server.port}" />
    <property name="username" value="${mail.server.username}" />
    <property name="password" value="${mail.server.password}" />
    <property name="requestContextPath" value="${request.context.path}" />
</bean>

希望此代码能解决您的问题。

答案 2 :(得分:0)

您可以使用Spring Expression Language(SpEL)在spring配置xml文件中获取java对象值。

一个例子:

<property name="misfireInstruction"
                          value="#{T(org.quartz.CronTrigger).MISFIRE_INSTRUCTION_FIRE_ONCE_NOW}"/>

答案 3 :(得分:0)

所以我就这样做了:

正如我所说,我有一个java.util.Properties对象。然后我创建了一个CustomProperty类,它扩展了PropertySource&gt;

public class CustomPropertySource extends PropertySource<Map<String, Object>>

然后在我的主要课程中,我做了以下几点:

AbstractApplicationContext context = new ClassPathXmlApplicationContext(new String[] {springConfigLocation, false);
context.getEnvironment().getPropertySources.addlast(new CustomPropertySource("custom", propertiesObject));
conext.refresh();

然后在spring配置文件中,我不得不添加:

<context: property-placeholder ignore-unresolvable="true"/>

因此,通过这种方式,我可以获取spring配置文件中定义的键的值,就像我们从属性文件中获取值一样。

谢谢, 拉胡