前言
在一个测试项目中个自定义配置文件user.properties,其内容如下:
user.name=zenning
user.address=北京市海淀区
user.email=187435958@qq.com
映射的配置类定义如下:
@Component
@PropertySource(value="classpath:user.properties")
@ConfigurationProperties(prefix="user")
public class User {
private String address;
private String email;
private String name;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", email='" + email + '\'' +
'}';
}
// get set 方法略
}
SpringBoot 测试类:
@SpringBootTest
@RunWith(SpringRunner.class)
class ApplicationTests {
@Autowired
private User user;
@Test
void testUserFromConfiguration(){
System.out.println(user);
}
}
测试结果是:
User{name='Administrator', address='北京市海淀区', email='187435958@qq.com'}
明明在配置文件里定义的是user.name=zenning, 为何这里输出的结果变成了Administrator,刚开始我也是无法理解,后来查阅资料后才明白加载配置文件时,默认是先读取系统变量的值,恰好我的电脑的名称就是Administrator, 进入dos模式,输入set 看看
C:\Users\Administrator>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Administrator\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
USERNAME=Administrator
USERPROFILE=C:\Users\Administrator
windir=C:\Windows
可以看到USERNAME=Administrator
明白这个之后如何解决呢,修改配置文件里面的key的前缀,
1.修改配置文件
key.name=zenning
key.address=北京市海淀区
key.email=187435958@qq.com
2.修改配置类
自定义配置类里有个注解@ConfigurationProperties(prefix="key") 指定的是key的前缀,
文件文件中原先的前缀是user,修改之后变成key
然后测试下看看结果:
User{name='zenning', address='北京市海淀区', email='187435958@qq.com'}
可以正常得到配置文件参数。
另一种解决方式就是修改配置文件里面key的名称。