当前位置: 首页 > 知识库问答 >
问题:

如何在Quarkus中读取环境变量

魏宸
2023-03-14

我正在尝试使用@ConfigProperty在我的Quarkus应用程序中读取环境变量,但没有成功。我认为仅指定变量名应该就足够了,但它不起作用:

@ConfigProperty(name = "MY_ENV_VAR")
String envVar;

我还尝试在应用程序中指定一个属性。属性

my.var=${MY_ENV_VAR:defaultValue}

读起来就像

@ConfigProperty(name = "my.var")
String myVar;

但变量始终为空。

我错过什么了吗?在Quarkus中读取环境变量的正确方法是什么
我正在使用Quarkus 1.2.0。最终的

共有1个答案

谷梁德容
2023-03-14

我和我的同事已经找到了问题的根源。我试图在构造函数中读取一个注释为@ConfigProperty的字段,但属性仅在调用构造函数后才被注入。

我提供了一个工作示例:

package org.acme.config;

import org.eclipse.microprofile.config.inject.ConfigProperty;

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class EnvGreetingService {

    private final String varA;

    @ConfigProperty(name = "ENV_VAR_B")
    String varB;

    public EnvGreetingService(@ConfigProperty(name = "ENV_VAR_A") String varA) {
        System.out.println("constructor varA=" + varA);
        System.out.println("constructor varB=" + varB);
        this.varA = varA;
    }

    public void greetWithEnvVar() {
        System.out.println("method varA=" + varA);
        System.out.println("method varB=" + varB);
    }
}

注意:应用程序中不需要映射环境变量。属性

控制台输出将是:

constructor varA=a
constructor varB=null
method varA=a
method varB=b

因此,如果希望在构造函数中使用应用程序属性或环境变量,则应将其注入构造函数参数中。

 类似资料:
  • 我正在使用Postman的打包应用程序版本来针对我的Rest API编写测试。我正在尝试管理连续测试之间的状态。为了方便起见,向Javascript测试运行时公开的Postman对象有设置变量的方法,但没有用于读取的方法。 现在,我可以在下一次调用中通过{{key}}结构读取这个值,该结构从当前环境中获取值。但是,这在测试中不起作用;它只在建筑材料中起作用。 那么,有没有人可以从测试中读到这些东西

  • 问题内容: 如何在应用程序上下文中读取系统环境变量? 我想要类似的东西: 要么 取决于环境。 我的应用程序上下文中可以有这样的东西吗? 根据系统环境变量设置实际值的地方 我正在使用Spring 3.0 问题答案: 你接近:o)Spring 3.0添加了Spring Expression Language。你可以使用 结合应该可以解决你的问题。 还请注意@yiling的评论: 为了访问系统环境变量(

  • 5.3.1 $%envVarName% 当编译时,$%envVarName% 将会被环境变量 envVarName 替换。

  • 问题内容: 有没有办法在Node.js代码中读取环境变量? 例如Python的。 问题答案: process.env.ENV_VARIABLE 您要访问的变量的名称在哪里。

  • 在SpringBoot中读取环境变量的最佳方法是什么? 在Java中,我使用了以下方法: 是否可以使用注释来实现?

  • 问题内容: 我在EC2竞价型实例上运行R,并且需要R终止实例并在脚本运行后取消竞价请求。 为此,我在环境变量中设置了“请求ID” ,我的计划是在脚本准备好后将以下代码简单地调用到R中 我遇到的问题是R无法“看到”我从外部R 键入时看到的相同环境变量,因此该命令无法正常工作。 我已经检查了一下,如果我将环境变量设置为R,就可以看到这些变量,但这是另一个问题。由于这些变量是动态的(每次创建竞价型实例时