1 问题概述
spring在读取properties文件属性时,当文件属性与系统属性冲突时,会读取到系统属性值。
2 问题复现
2.1 读取properties文件
- 创建maven工程
- 在pom.xml文件中添加spring坐标
- 在resources目录下创建spring配置文件
- 将配置文件内容改为以下内容
-
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
- 在resources目录下创建test.properties文件
- 在test.properties文件内添加
username=123
- 加载test.properties文件
- 在spring配置文件中添加如下代码
<context:property-placeholder location="classpath:test.properties"/>
2.2 读取文件属性
- 在java目录下创建Test.java文件用于输出读取到的属性
-
package cn.qiguai;
public class Test {
private String str;
public void setStr(String str) {
this.str = str;
}
public void save() {
System.out.println("str = " + str);
}
}
- 读取文件属性(利用${})
- 创建TestDemo.java文件输出读取到的数据
package cn.qiguai;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Test test = (Test) ac.getBean("test");
test.save();
}
}
- 我们预期结果应该是
str = 123
,而观察控制台输出结果却为str = Administrator
3 原因
test.properties文件中username属性与系统属性名称冲突,而系统属性优先级高于文件属性,因此读取到的就是系统属性。
4解决方案
在如下位置添加如下代码,让spring取消加载系统属性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)