在 Kotlin + Spring Boot 中使用环境变量
内容提要
本文总结了在Kotlin + Spring Boot中使用环境变量的方法,包括JVM选项、操作系统环境变量和应用程序配置文件。推荐使用操作系统环境变量管理,可以通过代码全局访问。
延伸解读
环境变量优先级:理解覆盖规则
Spring Boot 启动时,环境变量的优先级从高到低依次为:JVM 选项、操作系统环境变量、application-{profile}.yml、application.yml。高优先级的变量会覆盖低优先级的同名变量。这意味着,如果你在 JVM 选项和配置文件中都设置了 spring.profiles.active,最终生效的是 JVM 选项中的值。理解这一顺序有助于避免配置冲突,尤其是在多环境部署时。
为何推荐操作系统环境变量
文章指出,将应用程序状态存储在源代码中(如 application.yml)并非好方法,从安全角度看尤其如此。推荐使用操作系统环境变量,因为状态不进入代码库,降低了敏感信息泄露的风险。此外,环境变量可以在安全隔离的存储库中管理,并通过 CI/CD 流程注入,实现配置与代码分离,提升安全性和灵活性。
代码中获取环境变量的两种方式
在 Spring Boot 中,可以通过 Environment::getProperty() 或 @Value 注解获取环境变量。前者注入 Environment 对象后调用 getProperty 方法,后者直接在字段上使用 @Value 注解。两者都适用于所有 Spring Bean。选择取决于个人偏好和具体场景,例如需要动态获取多个变量时 Environment 更灵活,而 @Value 更简洁。
本地开发中的环境变量管理
对于本地开发,文章建议使用 .env 文件管理环境变量,并通过脚本或 IDE 插件应用。例如,创建 foo-local.env 文件,然后在运行脚本中使用 set -a; source foo-local.env; set +a 加载。在 IntelliJ IDEA 中,可以安装 EnvFile 插件,在运行配置中启用并指定 env 文件。这样,环境变量可以在代码中通过 System.getenv 全局访问,而不仅限于 Spring Bean。
Q&A
在Kotlin + Spring Boot中如何使用环境变量?
可以通过JVM选项、操作系统环境变量和应用程序配置文件来使用环境变量,推荐使用操作系统环境变量。
环境变量的优先级是什么?
环境变量的优先级依次为:JVM选项、操作系统环境变量、应用程序配置文件。
如何在Spring Boot中获取环境变量?
可以使用Environment::getProperty()方法或@Value注解来获取环境变量。
为什么推荐使用操作系统环境变量?
因为将应用程序状态存储在源代码中并不安全,操作系统环境变量是更安全的管理方式。
如何在IntelliJ IDEA中应用环境变量?
可以使用EnvFile插件,在“编辑运行配置”中启用EnvFile并添加链接的env文件。
如何通过CI/CD流程注入环境变量?
可以在安全隔离的存储库中管理环境变量文件,并通过CI/CD流程将其注入。