我有一个上下文:在我的根应用程序上下文中定义的property-placeholder
<context:property-placeholder location="classpath:runtime/runtime.properties"
ignore-unresolvable="true" />
并且应用程序上下文在web.xml中注册
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
我有一个调度程序 - servlet:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispather</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我在dispatcher-servlet.xml中使用了一个占位符,但它似乎不起作用:
<int-http:inbound-gateway path="${myplaceholder}" .../>
WebApplicationContext中的bean似乎可以引用RootApplicationContext中的bean但不能共享RootApplicationContext中定义的占位符?
我错过了什么吗?
答案 0 :(得分:2)
property-placeholder实际上是一个bean post处理器。它只能应用于相同上下文中的bean。因此,根应用程序上下文中定义的property-placeholder不会影响dispatcher-servlet中的bean(WebApplicationContext可以引用RootApplicationContext中的bean,但RootApplicationContext不能引用WebApplicationContext中的bean)。
我通过使用配置Facade和spring el解决了这个问题。
在根应用程序上下文中:
<context:property-placeholder location="classpath:runtime/runtime.properties"/>
<bean id="configurations" class="x.y.z.Configurations">
<property name="inboundGatewayPath" value="${myplaceholder}" />
</bean>
在Web应用程序上下文中:
<int-http:inbound-gateway path="#{configurations.inboundGatewayPath}" .../>