如何在配置文件中动态传递值

时间:2013-06-19 08:47:20

标签: database spring dynamic properties configuration

我想从DB动态传递属性的value标记中的值。这在春天有可能吗?怎么样?

例如,在下面的配置中。

<bean id="proxyFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" value="WSDLURL"/>
    <property name="address" value="WSDLURL"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
  </bean>

我希望上面提到的属性为"proxyFactory"的bean的属性,即<WSDLURL><username>以及<password>从数据库中获取并动态传递。< / p>

2 个答案:

答案 0 :(得分:1)

您可以编写另一个Java类并将其作为应用程序上下文中的bean使用,并使用Spring Expression Language,您已经评估并获得方法调用的输出。

XML配置:

<property name="serviceClass" 
                 value="#{webServiceInfoFromDB.wsdlUrl}" />
<property name="username" 
                 value="#{webServiceInfoFromDB.username}" />

WeServiceInfoFromDB.java类:

class WebServiceInfoFromDB {

   public String getWsdlUrl() {
      // Get the Wsdl URL from DB.
      return wsdlUrl;
   }

   public String getUsername(){
      // get the username from DB
      return username;
   }

应用程序上下文中的XML配置:

<bean id="webServiceInfoFromDB" class="WebServiceInfoFromDB">
   <property name="dataSource" ref="dataSource"/>
</bean>

答案 1 :(得分:-1)

您可以使用包含键值对的属性文件名设置属性Place Holder。

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

config.properties文件如下所示:

wsdl.url = http://server:8080/ServiceAccessPoint
webservice.username = guest
webservice.passward = guest123

现在您可以使用$ {key}

修改bean定义
<bean id="proxyFactory" 
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="${wsdl.url}"/>
<property name="address" value="${wsdl.url}"/>
<property name="username" value="${webservice.username}"/>
<property name="password" value="${webservice.password}"/>