我最近开始探索JAVA和Springboot。 我遇到了一种情况,我需要读取一个名为的环境变量,例如“英雄” 现在,我的以下代码尝试读取相同的环境变量但失败了! 作为上下文,我正在运行 RedHat8
SpringBootApplication
public class MyApp implements CommandLineRunner {
@Value("${HERO}")
private String envVariable;
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("Value of HERO: " + envVariable);
}
}
错误
Could not resolve placeholder 'HERO' in value "${HERO}"
我已经仔细检查过,该变量存在并且在终端中全局可读,并且也添加到 BASHRC 文件中。
终端:
main * $ echo $HERO
James Bond
.BASHRC 文件:
export HERO="James Bond"
但是,当我尝试读取其他一些系统环境变量时,它会起作用。
例如,当我用
{HOME}
替换我的 varibale 时
然后它确实显示
Value of HERO: /home/awesomemachine/clark
我做错了什么?我已经重新启动、重建和刷新多次但无法弄清楚!任何建议将不胜感激!
谢谢!
我不确定在
@Value
应用程序类中而不是在 @SpringBootApplication
中使用 @Component
是否是一个好主意,但无论如何。您可以通过应用程序上下文获取环境变量,如下所示:
ApplicationContext applicationContext = new SpringApplicationBuilder(MyApp.class).run(args);
Environment environment = applicationContext.getEnvironment();
System.out.println(environment.getProperty("HERO"));