PropertyPlaceholderConfigurer

PropertyPlaceholderConfigurer

我想使用PropertyPlaceHolderConfigurer将内部Web服务的WSDL URL动态传递到我的Spring beans.xml中。

这是场景:

我的Web应用程序已部署在WebLogic 10.3中。
WSDL URL包含在属性文件中,该属性文件位于我的应用程序之外(直接位于对应的域文件夹下,而我的应用程序位于autodeploy文件夹内)。我在域的setDomainEnv.cmd文件中设置此属性文件的位置,如下所示:

set JAVA_PROPERTIES=%JAVA_PROPERTIES% %CLUSTER_PROPERTIES% -Dproperty.file.path.config=%DOMAIN_HOME%\Service.properties

这是我的Service.properties文件包含的内容:
Service.WSDL.PATH=http://localhost:8088/mockServiceSoap?WSDL

我的Spring beans.xml配置:----
<bean id="file.path" class="java.lang.System" factory-method="getProperty">
      <constructor-arg index="0"><value>property.file.path.config</value></constructor-arg>
</bean>

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="location" ref="file.path"/>
</bean>

<bean id="myServiceId" class="com.test.service.ServiceImpl">
    <property name="myServiceSoap">
    <ref bean="myService"/>
    </property>
</bean>

<bean id="myService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
   <property name="serviceInterface" value="com.test.service.ServiceSoap"/>
   <property name="wsdlDocumentUrl" value="${Service.WSDL.PATH}"/>
</bean>

我专门为PPC启用了DEBUG日志,这是我在应用程序日志中看到的:

INFO org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 178-从URL加载属性文件[文件:D:/bea10.3/user_projects/domains/my_domain/Service.properties]

因此,似乎尽管PPC正在加载Service.properties文件,但${Service.WSDL.PATH}并未被替换。

我在这里做错了什么?

另外,如何确定PPC是否尝试用占位符替换值?我希望日志文件包含该信息,但是那里什么也没有。

任何帮助表示赞赏。

最佳答案

我已经知道,PropertyPlaceholderConfigurer必须首先在应用程序上下文文件中声明,否则无法保证加载顺序。我花了几个小时才意识到这一点。

尝试将“file.path” bean移到PropertyPlaceHolderConfigurer的location属性中。

10-04 10:53