首页 > 解决方案 > 读取部署在 Kubernetes 上的 Springboot 中的秘密

问题描述

我在 config/yaml 文件中配置了许多秘密。有一个秘密会引起麻烦。我只想打印出注入该秘密的价值。

apiVersion: v1
kind: ConfigMap
metadata:
name: myapplication-config
data:
  config.yaml: |
    'mysecret1': ${DB_PASSWORD}
    'mysecret2': ${ANOTHER_SECRET}

当我的应用程序全部启动时,我有一个控制器,我在其中发出 GET 请求并尝试打印出秘密:

@Autowired
Environment env;

@GetMapping("/test")
public String print(){
  System.out.println(env.getProperty("mysecret2"));
}

我故意在控制器中检查它,以便应用程序完全启动并运行,并设置和解决所有依赖项等。

当我打印它时,它会抛出一个错误:

原因:java.lang.IllegalArgumentException:无法在 org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) 中解析值“${mysecret2}”中的占位符“mysecret2”

知道如何检查从 config/env/dev/config.yaml 发送到应用程序中的秘密吗?

标签: javaspring-bootkubernetes

解决方案


我能够通过环境变量读取它们:

@Autowired 
private org.springframework.core.env.Environment env;

//inside some method
@GetMapping("/test")
public String print(){
  System.out.println(env.getProperty("mysecret2"));
}

我尝试在下面使用,但没有奏效。

@Value("${mysecret2})
private String mySecret2; //didn't work

....

System.getEnv("mySecret2"); //didn't work
System.getProperty("mySecret2"); //didn't work

推荐阅读