繁体   English   中英

具有MethodInvokingFactoryBean的PropertySourcesPlaceholderConfigurer-未解决的值

PropertySourcesPlaceholderConfigurer with MethodInvokingFactoryBean - unresolved value

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用PropertySourcesPlaceholderConfigurer访问包含2个值的文件:key1 = value1 key2 = value2。

<bean id="mainProperties"      
      class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer" id="">
    <property name="locations">
        <list>
           <value>file:datafile.properties</value>
        </list>
    </property>
</bean>

然后使用MethodInvokingFactoryBean将datafile.properties中的值设置为系统属性。

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject">
        <!-- System.getProperties() -->
        <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
            <property name="targetClass" value="java.lang.System" />
            <property name="targetMethod" value="getProperties" />
        </bean>
    </property>
    <property name="targetMethod" 
              value="putAll" />
    <property name="arguments">
        <!-- The new Properties -->
        <util:properties>
            <prop key="my.key1">${key1}</prop>
            <prop key="my.key2">${key2}</prop>
        </util:properties>
    </property>
</bean>

问题-$ {key1}和$ {key2}无法解析。 我期望这些值将得到解决,因为我正在使用PropertySourcesPlaceholderConfigurer加载datafile.properties。 有人可以帮忙吗?

1 个回复

我是春季初学者。 我的解决方案是:

  1. 文件datafile.properties
key1=Hellow
key2=world.
  1. 在root-content.xml中进行配置
<bean id="propertySources"
      class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="locations">
      <array>
        <value>/WEB-INF/jdbc.properties</value>
        <value>/WEB-INF/datafile.properties</value>
      </array>       
    </property>
</bean>

<bean id="sysProps"
      class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="java.lang.System"/>
    <property name="targetMethod" value="getProperties"/>
</bean>

<bean id="myNewProps"
      class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="sysProps"/>
    <property name="targetMethod" value="putAll"/>
    <property name="arguments">
      <map>
        <entry key="my.key1" value="${key1}"/>
        <entry key="my.key2" value="${key2}"/>
      </map>
    </property
</bean>
  1. 在我的中央控制器MainController.java
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home() {
  //...
  Properties prop = System.getProperties();
  String myKey1 = prop.getProperty("my.key1");
  String myKey2 = prop.getProperty("my.key2");

  System.out.println("\nProperties:\n my.key1 = " + myKey1 +
  "\n my.key2 = " + myKey2);
  //...
}

控制台输出:

Properties:
 my.key1 = Hellow
 my.key2 = world.

注意:

当使用两个placeholderConfigurers时,可能会导致异常: Could not resolve placeholder 'key1' in string value "${key1}" 每个使用的placeholderConfigurer必须具有不同的占位符。

例如:

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/jdbc.properties"/>        
</bean>
<!-- default placeholder ${ } -->

<bean id="propertySources"
    class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="locations">
      <array>    
        <value>file:datafile.properties</value>
      </array>       
    </property>
    <property name="placeholderPrefix" value="#["></property>
    <property name="placeholderSuffix" value="]"></property>        
</bean> 
<!-- placeholder #[ ] for datafile.properties -->
9 PropertySourcesPlaceholderConfigurer和@Configuration

我正在尝试更好地理解Spring中的配置。 我已经阅读了一些示例和教程,但是到目前为止,正在发生的事情仍然有些神秘,例如: blah.properties: Blah.java BlahConfig.java 如果没有任何内容,这将(部分地)很好地完成所有工作,因 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM