问题:

最近发现一个项目中,在类中通过@Value("${key}")获取配置文件中变量值突然不行了,直接输出${key},示例代码如下:

java类中:

import org.springframework.beans.factory.annotation.Value;

    @Value("${recharge.uri}")
private String rechargeUri;

application.properties配置文件中:

recharge.uri=http://xxx.com/project-name/recharge/fetch.do

applicationContext.xml文件中配置如下:

    <context:property-placeholder location="WEB-INF/application.properties"
ignore-unresolvable="true"/>

web.xml中配置如下:

     <!--Spring ApplicationContext载入,不指定配置文件名则默认为applicationContext.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!--SpringMVC配置,不指定配置文件名则默认为[servlet-name]-servlet.xml,即dispatcher-servlet.xml -->
<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>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>

当项目运行时,变量rechargeUri直接输出了${recharge.uri}这个字符串,而不是我配置文件中定义的http://xxx.com/project-name/recharge/fetch.do。
通过网上查资料,发现如果spring和springmvc并存的情况时,有以下规则:

1.Spring 允许在父子继承关系中定义多个上下文
2.applicationContext.xml 文件是为了“根webapp应用上下文”定义bean,也就是说它的上下文是和webapp相关联的
3.spring-servlet.xml文件是为了一个servlet 应用上下文定义bean,在一个webapp中可以有多个此配置文件
4.每个springmvc的配置文件[servlet-name]-servlet.xml对应一个web.xml中的servlet定义(例如: 名为spring1的servlet拥有配置文件spring1-servlet.xml, 名为spring2的servlet拥有配置文件spring2-servlet.xml).
5.当存在多个springmvc配置文件时,他们是不能互相访问的。
6.SpringMVC的配置文件中可以直接用id引入spring配置文件中定义的bean,但是反过来不可以。

注:对于ignore-unresolvable="true",当加载多个property-placeholder时,第一个property-placeholder时出现解析不了的占位符会忽略掉,由后面property-placeholder进行解析。

解决方法:

对于我这种情况,就是要在dispatcher-servlet.xml中添加application.properties的载入。

dispatcher-servlet.xml

    <context:property-placeholder location="WEB-INF/application.properties" />

重新发布项目后,可以正常获取变量值。

参考文章:https://blog.csdn.net/zuoyixiao/article/details/54288329

spring中@Value("${key}")值原样输出${key}分析与解决的更多相关文章

  1. (转)AIX 中 Paging Space 使用率过高的分析与解决

    AIX 中 Paging Space 使用率过高的分析与解决 原文:https://www.ibm.com/developerworks/cn/aix/library/au-cn-pagingspac ...

  2. 对象key值排序,以key值(数字)大小顺序遍历属性,helper._sort()

    var helper = { _sort:function(data){ //{“20141216”:{},“20141217”:{}}按大小排序, var arr1 = [],arr2=[]; fo ...

  3. 关于spring中请求返回值的json序列化/反序列化问题

    https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑

  4. Antd中,Select 中value设值,导致placeholder不生效解决方法

    <Select key="sm2" placeholder="姓名" showSearch={true} allowClear={true} showAr ...

  5. VS2019中scanf返回值被忽略的问题及其解决方法

    目录 [问题](#昨天在使用Visual Studio 2019编写C语言程序时遇到了scanf返回值被忽略问题) 问题原因 方法① 方法② 方法③ 方法④ 昨天在使用Visual Studio 20 ...

  6. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_8 Mybatis中的返回值深入-调整实体类属性解决增和改方法的报错

    如果实体类和数据库表内的字段没有保持一致 修改了属性子弹. 重新生成getter和setter还有toString方法 测试类里面,相关set的方法就都会报错. 只需要修改为最新的set方法就可以了. ...

  7. AIX 中 Paging Space 使用率过高的分析与解决

    AIX操作系统中Paging Space是很重要的设备,当系统中Paging Space使用率过高.系统内存不足时,将影响系统的整体性能,甚至会造成系统的挂起.针对这种情况,通常可以靠增加Paging ...

  8. Android中使用Handler造成内存泄露的分析和解决

    什么是内存泄露?Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用所指向 ...

  9. 在Service中抛出异常事务未回滚问题分析与解决

    1.问题提出:在service中写方法时,抛出了一个Exception, 本来目的是为了让事务回滚, 但事实上没有回滚,产生了脏数据.代码如下:@Override@Transactionalpubli ...

随机推荐

  1. js 数组元素排序

    字母排序 <html> <body> <script type="text/javascript"> ) arr[] = "Georg ...

  2. POJ 1088 滑雪(模板题 DFS+记忆化)

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  3. 在1-10中选择一个数,输出x+xx+xxx+xxx....x之和,如:数字为2,则2+22=24

    代码: package bao; import java.util.Random; public class a { public static void main(String[] args) { ...

  4. nodejs点滴

    1.exports与module.exports http://cnodejs.org/topic/5231a630101e574521e45ef8 因为require指向了module.export ...

  5. Go语言学习之9 网络协议TCP、Redis与聊天室

    主要内容 1. Tcp编程2. redis使用 1. Tcp编程 (1)简介       Golang是谷歌设计开发的语言,在Golang的设计之初就把高并发的性能作为Golang的主要特性之一,也是 ...

  6. 解决同一activity下多个fragment 切换时重复执行onCreateView方法

    Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决的办法是:在Fragment onCreateView ...

  7. Golang 容器和不同header的解析

    记录一下,用golang实现一个静态资源容器,膜拜下强人 http.Handle("/", http.FileServer(http.Dir(currentPath+"/ ...

  8. [lightoj P1306] Solutions to an Equation

    [lightoj P1306] Solutions to an Equation You have to find the number of solutions of the following e ...

  9. serial front_door signment and gps signment

    import socketimport serialimport osimport sysimport struct#serial ser_intf = serial.Serial(port='/de ...

  10. decode encode

    https://blog.csdn.net/crylearner/article/details/38521685,python常用的十进制.16进制.字符串.字节串之间的转换