Use Envsubst to Replace Env Var in application.yaml of Spring Boot
目录
背景#
我们的Spring Boot在Kubernetes环境中运行,配置文件application.yaml中包含了一些环境变量占位符,例如${DB_HOST}、${DB_PORT}等。这些变量需要在应用启动前被替换为实际的值。
但这样的配置文件无法直接被Spring Boot识别,在本地需要开发或者调试的时候,我们希望能够将这些环境变量替换为实际的值,从而生成一个完整的application.yaml文件。
解决方案#
envsubst是一个命令行工具,可以将输入中的环境变量替换为其实际值。
步骤#
在ubuntu中安装envsubst:
sudo apt update
sudo apt install gettext-base
原先的application.yaml文件内容如下:
app:
version: "@project.version@"
payment-api-key: ${PAYMENT_API_KEY}
payment-secret-key: ${PAYMENT_SECRET_KEY}
payment-endpoint: ${PAYMENT_MS_INTERNAL_URL}
site-db-name: ${SITE_DB_NAME}
该文件会在应用的jar文件中
mkdir extracted_folder
cd extracted_folder
jar xf ../app.jar
Then can find the application.yaml file under BOOT-INF/classes/ folder.
root@service-578fdcb4b4-szpl5:/app/extracted_folder/BOOT-INF/classes# ls -trl
total 24
-rw-r--r--. 1 root root 4045 Nov 13 02:22 logback-spring.xml
-rw-r--r--. 1 root root 1151 Nov 13 02:22 git.properties
-rw-r--r--. 1 root root 7533 Nov 13 02:22 application.yaml
drwxr-xr-x. 3 root root 22 Nov 13 02:22 com
然后使用envsubst命令替换环境变量:
envsubst < application.yaml > application-resolved.yaml
此时,application-resolved.yaml文件中的环境变量占位符已经被替换为实际的值。
将文件取出到本地
kubectl cp <pod_name>:/app/extracted_folder/BOOT-INF/classes/application-resolved.yaml ./application-resolved.yaml
Read other posts