Java Spring—使用属性占位符加载war文件或类路径之外但在文件系统中的属性文件
我已经按照如下所示配置了属性文件的加载(Spring3.1) 我的SpringXMLJava Spring—使用属性占位符加载war文件或类路径之外但在文件系统中的属性文件,java,spring,spring-mvc,properties,autowired,Java,Spring,Spring Mvc,Properties,Autowired,我已经按照如下所示配置了属性文件的加载(Spring3.1) 我的SpringXML <context:component-scan base-package="com.mypackage"/> <context:property-placeholder location="file:///C:/temp/application.properties"/> 在我的java类中,我声明了如下属性: private @Value("${expirationOffset}")
<context:component-scan base-package="com.mypackage"/>
<context:property-placeholder location="file:///C:/temp/application.properties"/>
在我的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>
上下文配置位置
/WEB-INF/my spring xml
并将其移动到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>
org.springframework.web.context.ContextLoaderListener
我的服务
org.springframework.ws.transport.http.MessageDispatcherServlet
上下文配置位置
/WEB-INF/my spring xml
上面的更改似乎已经修复,因为我现在得到了正确的值。我认为我最初的方式是将它放在应用程序上下文中,这意味着它将在整个应用程序/webapp中可用
在我上面列出的3种模式中,msm弹簧有什么区别 编辑:
您是否尝试将setter方法与#{expirationOffset}
一起使用
i、 e:
private String propertyValue;
@Value("#{expirationOffset}")
public void setPropertyValue(String property) {
propertyValue = property;
}
另一个选项:
添加Properties bean而不是PropertyPlaceConfigurer,如下所示:
<util:properties id="myProps" location="file:///C:/temp/application.properties" />
您必须添加xmlns:util=”http://www.springframework.org/schema/util“
到xmlns
贴花和相应的http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
到上下文配置xml中的xsi:schemalocation
这肯定有用
希望有帮助。:) 根据您提供的信息,这是一种推测:
您可能没有
,我只是尝试了一下,它正在打印“VALUE-#@VALUE${expirationOffset}”作为输出。在我看来,spEL没有被解释。我的错,再次检查答案….:(在“@Value”里面不应该有“@Value”:(我的情况正好相反。属性占位符被定义为org.springframework.ws.transport.http.MessageDispatcherServlet servlet的参数值,但不是参数值。我移动了它,现在可以看到这些值。请参阅原始帖子中的编辑。很酷,我已经根据这些信息更新了答案。这不起作用的原因是什么可能是因为PropertyPlaceHolderConfigure是一个BeanFactoryPostProcessor,并在其定义的上下文中解析占位符-在本例中是根上下文,而不能在Web上下文中解析占位符。因此,如果我想从根Web应用程序上下文配置加载属性并[Dispatcher]Servlet上下文中的bean必须注入这些属性值,那么就没有办法了?建议我在定义/扫描使用这些属性的bean的同一配置文件中加载属性文件吗?
private String propertyValue;
@Value("#{expirationOffset}")
public void setPropertyValue(String property) {
propertyValue = property;
}
<util:properties id="myProps" location="file:///C:/temp/application.properties" />
<util:properties id="myProps" location="classpath:application.properties" />
private String propertyValue;
@Value("#{myProps.expirationOffset}")
public void setPropertyValue(String property) {
propertyValue = property;
}