簡體   English   中英

如何從 Spring Boot 獲取操作系統環境變量?

[英]How to get OS environment variable from Spring Boot?

我是java和spring框架的新手。 我的問題是如何將 OS(ubuntu) 環境變量注入 spring boot bean。 我試過的:

@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
 @Value("${COMPONENT_PARAM_CORS}")
 private String COMPONENT_PARAM_CORS;

 @Override
 public void addCorsMappings(CorsRegistry registry) {
  registry.addMapping("/"+COMPONENT_PARAM_CORS);
 }
}

導出 COMPONENT_PARAM_CORS=**

打印環境

告訴我它存在,但是當我嘗試 mvn clean install 時:發生錯誤

java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error 
creating bean with name 'corsConfig': Injection of autowired dependencies 
failed; nested exception is java.lang.IllegalArgumentException: Could not 
resolve placeholder 'COMPONENT_PARAM_CORS' in value "${COMPONENT_PARAM_CORS}"
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 
'COMPONENT_PARAM_CORS' in value "${COMPONENT_PARAM_CORS}"

然后我的單元測試也下降了(我試圖搜索這個錯誤,但所有主題都是舊的並且使用來自 application.properties 的參數,但我需要使用 env var 而不是 application.properties)

您可以使用System.getenv(<environment name>)方法來檢索環境變量值。 喜歡:

registry.addMapping("/" + System.getenv("COMPONENT_PARAM_CORS"));

或使用默認值:

registry.addMapping("/" + System.getenv().getOrDefault("COMPONENT_PARAM_CORS", "DEFAULT_VALUE"))

這里有更多信息https://docs.oracle.com/javase/tutorial/essential/environment/env.html

如果你真的想注入變量值,你可以將代碼修改為:

@Value("#{systemEnvironment['COMPONENT_PARAM_CORS'] ?: 'DEFAULT_VALUE'}")
private String COMPONENT_PARAM_CORS;

您應該使用System.getenv() ,例如:

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n",
                              envName,
                              env.get(envName));
        }
    }
}

請參閱此文檔此問題

@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {

 @Value("#{systemEnvironment['COMPONENT_PARAM_CORS']?:'**'}")
 private String COMPONENT_PARAM_CORS;

 @Override
 public void addCorsMappings(CorsRegistry registry) {
  registry.addMapping("/"+COMPONENT_PARAM_CORS);
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM