Springboot应用程序不读取自定义环境变量

问题描述 投票:0回答:1

我最近开始探索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

我做错了什么?我已经重新启动、重建和刷新多次但无法弄清楚!任何建议将不胜感激!

谢谢!

java linux spring-boot environment-variables redhat
1个回答
0
投票

我不确定在

@Value
应用程序类中而不是在
@SpringBootApplication
中使用
@Component
是否是一个好主意,但无论如何。您可以通过应用程序上下文获取环境变量,如下所示:

ApplicationContext applicationContext = new SpringApplicationBuilder(MyApp.class).run(args);
Environment environment = applicationContext.getEnvironment();
System.out.println(environment.getProperty("HERO"));
© www.soinside.com 2019 - 2024. All rights reserved.