gpt4 book ai didi

java - Spring - 使用属性占位符加载 war 文件或类路径之外但在文件系统中的属性文件

转载 作者:行者123 更新时间:2023-11-30 06:29:46 25 4
gpt4 key购买 nike

我已经配置了属性文件的加载,如下所示(Spring 3.1)

我的 spring-xml

<context:component-scan base-package="com.mypackage"/>
<context:property-placeholder location="file:///C:/temp/application.properties"/>

网络.xml

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/my-spring-xml
</param-value>
</context-param>

应用程序属性

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 有什么区别?

最佳答案

这是根据您提供的信息的一些推测:

您可能没有 <context:property-placeholder..在您的根 Web 应用程序上下文中 - 由 ContextLoaderListener 加载的上下文,而不是您可能将它放在 Web 上下文中(由 Dispatcher servlet 加载)。能否确认一下。

更新:根据评论,问题似乎是 <context:propert-placeholder..在根 Web 应用程序上下文中定义,但在 Web 上下文的组件中被引用。

在这种情况下,修复方法是将 propertyplaceholder 移动到 Web 上下文(通过 MessageDispatcherServlet 定义)。

关于java - Spring - 使用属性占位符加载 war 文件或类路径之外但在文件系统中的属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11141193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com