问题:

最近发现一个项目中,在类中通过@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. UGUI之导入图片之前自动设置图片打包的 tag

    之前一直在用的是NGUI,最近不知怎么突然兴趣来潮,想学习一下UGUI,毕竟,现在纵观Unity的市场,完全是UGUI的天下,NGUI已经渐渐退隐江湖,哈哈哈... 先来记录下,在图片资源导入到Uni ...

  2. linux软件管理之rpm管理rpm包

    使用RPM工具管理RPM包 ====================================================================================需要 ...

  3. linux存储管理之磁盘阵列

    磁盘阵列 RAID ====================================================================================RAID:廉 ...

  4. Node.js简述

    Node.js是2009年5月由Ryan Dahl 发布的服务器程序. 它封装了Google V8 JavaScript 引擎, 并将其重建为可在服务器上使用. 它旨在提供一种简单的构建可伸缩网络程序 ...

  5. 『TensorFlow』网络操作API_下

    一.优化器基类介绍 标注一点,优化器中的学习率可以是tensor,这意味着它可以feed, learning_rate: A Tensor or a floating point value. 正常使 ...

  6. 设计图与html 对比

    简易打开旧版火狐  网页版火狐添加组件 新版有时也会没有    谷歌是腾讯的

  7. 1021. Remove Outermost Parentheses删除最外层的括号

    网址:https://leetcode.com/problems/remove-outermost-parentheses/ 使用栈的思想,选择合适的判断时机 class Solution { pub ...

  8. 添加浏览器back操作时的响应事件

    https://blog.csdn.net/xcqingfeng/article/details/70800118 $(function(){ pushHistory(); window.addEve ...

  9. excel表格中,怎么根据一列重复的数据求对应另一列总和

    如下: 求出姓名对应分数总和对应 : 首先复制一份Sheet2 对Sheet1进行操作选中A列姓名 数据->删除重复项->以前选中区域排序->删除重复项 然后删除对应成绩项选中张三对 ...

  10. day72 关于rbac组件的小部分面试题

    rbac的权限组件   基于角色的权限控制 1.什么是权限? url代表的就是一个权限 2.如何实现权限的控制? 表结构  以我们讲的课的内容为例 菜单表: - title 标题 - icon 图标 ...