java - Spring Boot使用@Value for userName获取无效属性值
问题描述
为什么当我使用此代码时 Spring Boot 给我错误的属性值
@Component
public class MyComponent implements ApplicationListener<ContextRefreshedEvent> {
@Value("${userName}")
private String user;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("===================: "+user);
}
}
应用程序属性
userName=admin
它不是在打印“管理员”,而是在打印我的 Windows 用户名。
解决方案
Spring Boot 使用一个非常特殊的 PropertySource 顺序,该顺序旨在允许明智地覆盖值。属性按以下顺序考虑:
1- 主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时为 ~/.spring-boot-devtools.properties)。
[...]
10-操作系统环境变量。
[...]
14- 打包 jar 之外的应用程序属性(application.properties和 YAML 变体)。
如您所见,您的操作系统环境变量优先于定义的变量,application.properties
当您想要覆盖它们时非常有用。
您应该考虑重命名变量,使其不会与 Windows 的环境变量名称冲突。
推荐阅读
- django - 在谷歌应用引擎标准环境上部署 django 应用程序后,我在哪里可以执行 celery 命令
- javascript - 在继续下一个功能之前停止播放声音
- java - 我对 java 函数签名有疑问
- nginx - Nginx如何按位置路由到反向代理
- javascript - 如何将这个特定的 js 数组转换为 js 对象?
- c++ - 如何在 C++ 中采用这种 STDIN 输入?
- css - 如何允许在底部制作页脚但不让它覆盖内容
- php - 我可以根据类别在 WooCommerce 商店页面和产品中设置不同的排序吗
- java - 按第一列然后按第二列对二维数组进行排序
- mysql - 寻找一种更好的方法来使用 Laravel 处理大型 XML 文件以将部分导入 MySQL 数据库