在Spring Boot的application.properties中使用环境变量
在Spring Boot的application.properties中使用环境变量
技术背景
在开发Spring Boot Web应用程序时,数据库信息(如URL、用户名和密码)通常需要根据不同的环境进行配置,例如本地开发环境、持续集成(CI)环境(如Jenkins)和生产环境(如OpenShift)。为了避免在application.properties
文件中硬编码数据库信息,我们可以使用环境变量来实现动态配置。
实现步骤
1. 创建环境变量
在本地和Jenkins虚拟机中创建系统环境变量,名称与OpenShift中的环境变量保持一致,并分别赋予正确的值。示例如下:
1 |
|
2. 在application.properties中引用环境变量
在application.properties
文件中,可以使用${}
语法来引用环境变量。示例如下:
1 |
|
3. 使用Spring Profiles(可选)
为不同的环境创建特定的配置文件,例如application-local.properties
、application-jenkins.properties
和application-openshift.properties
。在运行应用程序时,通过设置SPRING_PROFILES_ACTIVE
环境变量来指定要使用的配置文件。示例如下:
1 |
|
4. 解决Flyway不识别直接环境变量的问题(可选)
如果使用Flyway且Spring Boot V2.1不识别直接在application.properties
中使用的环境变量,可以创建一个.env
文件,将环境变量存储在其中,然后将这些变量导出到环境中。示例如下:
1 |
|
1 |
|
核心代码
以下是在Java代码中获取环境变量的示例:
1 |
|
最佳实践
- 使用Spring Profiles:为不同的环境创建特定的配置文件,通过
SPRING_PROFILES_ACTIVE
环境变量来指定要使用的配置文件,提高配置的灵活性和可维护性。 - 安全存储敏感信息:使用环境变量来存储敏感信息(如数据库密码),避免在代码库中硬编码这些信息,提高安全性。
- 结合使用环境变量和Spring Profiles:在开发环境中使用静态配置信息,在生产环境中使用环境变量,这样开发人员在部署开发配置文件时无需在本地定义环境变量。
常见问题
1. 环境变量未生效
- 检查环境变量是否正确设置:确保环境变量的名称和值正确,并且已经正确导出到环境中。
- 重启IDE或应用程序:某些情况下,IDE或应用程序可能需要重新启动才能读取新的环境变量。
2. Flyway不识别直接环境变量
按照上述步骤创建.env
文件,并将环境变量导出到环境中。
3. 无法在运行时更改活动配置文件
Spring在构建应用程序上下文时会确定活动配置文件,一旦应用程序启动,就无法更改活动配置文件。如果需要在运行时更改配置,可以考虑使用其他配置管理工具。
在Spring Boot的application.properties中使用环境变量
https://119291.xyz/posts/2025-04-22.use-env-variables-in-spring-boot-application-properties/