我已经配置了属性文件的加载,如下所示(Spring 3.1)
我的 - 弹簧 - XML
<context:component-scan base-package="com.mypackage"/>
<context:property-placeholder location="file:///C:/temp/application.properties"/>
的web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/my-spring-xml
</param-value>
</context-param>
application.properties
expirationOffset = 777
在我的java类中,我已声明属性如下:
private @Value("${expirationOffset}") String propertyValue;
由于某种原因,该值未被初始化。当我运行以下语句时:
System.out.println("VALUE - " + propertyValue);
输出始终为
16:03:02,355 INFO [stdout] (http--127.0.0.1-8080-1) VALUE - ${expirationOffset}
我试图将属性文件移动到war文件中以尝试在类路径中访问它但仍然是同样的问题。以下是我从类路径访问它的方法。
<context:property-placeholder location="classpath:/conf/application.properties"/>
理想情况下,我希望将属性文件保留在war文件之外,因为我不希望重建war文件,因为属性更改很简单。
我错过了什么吗?
我从这个上下文中删除了msm-spring.xml初始化参数:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/my-spring-xml
</param-value>
</context-param>
并将其移动到servlet上下文,如下所示。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>myservice</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/my-spring-xml
</param-value>
</init-param>
</servlet>
上述更改似乎已修复,因为我现在正在获得正确的值。我认为我最初的方式是我在应用程序上下文中拥有它,这意味着它将在整个应用程序/ webapp中可用。
在上面列出的3个中的任何一个中使用msm-spring有什么区别?
答案 0 :(得分:3)
根据您提供的信息,这是一些猜测:
您的根Web应用程序上下文中可能没有<context:property-placeholder..
- 由ContextLoaderListener加载的上下文,而您可能在Web上下文中使用它(由Dispatcher servlet加载)。你能否证实这一点。
更新:根据评论,问题似乎是<context:propert-placeholder..
已在Root Web应用程序上下文中定义,但在Web Context中的组件中引用。
修复是在这种情况下将propertyplaceholder移动到Web上下文(通过MessageDispatcherServlet定义的一个)。
答案 1 :(得分:2)
编辑:
您是否尝试将setter方法与#{expirationOffset}
??
即。 :
private String propertyValue;
@Value("#{expirationOffset}")
public void setPropertyValue(String property) {
propertyValue = property;
}
另一种选择:
添加属性bean而不是PropertyPlaceConfigurer,如下所示:
<util:properties id="myProps" location="file:///C:/temp/application.properties" />
OR
<util:properties id="myProps" location="classpath:application.properties" />
替换Setter稍作修改
private String propertyValue;
@Value("#{myProps.expirationOffset}")
public void setPropertyValue(String property) {
propertyValue = property;
}
您必须在上下文配置xml中将xmlns:util="http://www.springframework.org/schema/util"
添加到xmlns
个decalrations并将http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
与xsi:schemalocation
相关联。
这绝对有用。
希望它有所帮助。 :)