专业的编程技术博客社区

网站首页 > 博客文章 正文

在Spring Boot的application.properties中使用环境变量

baijin 2025-05-05 14:00:23 博客文章 4 ℃ 0 评论

技术背景

在开发Spring Boot Web应用程序时,数据库信息(如URL、用户名和密码)通常需要根据不同的环境进行配置,例如本地开发环境、持续集成(CI)环境(如Jenkins)和生产环境(如OpenShift)。为了避免在application.properties文件中硬编码数据库信息,我们可以使用环境变量来实现动态配置。

实现步骤

1. 创建环境变量

在本地和Jenkins虚拟机中创建系统环境变量,名称与OpenShift中的环境变量保持一致,并分别赋予正确的值。示例如下:

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"

2. 在application.properties中引用环境变量

application.properties文件中,可以使用${}语法来引用环境变量。示例如下:

spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}

3. 使用Spring Profiles(可选)

为不同的环境创建特定的配置文件,例如
application-local.properties

application-jenkins.properties

application-openshift.properties
。在运行应用程序时,通过设置SPRING_PROFILES_ACTIVE环境变量来指定要使用的配置文件。示例如下:

export SPRING_PROFILES_ACTIVE=jenkins

4. 解决Flyway不识别直接环境变量的问题(可选)

如果使用Flyway且Spring Boot V2.1不识别直接在application.properties中使用的环境变量,可以创建一个.env文件,将环境变量存储在其中,然后将这些变量导出到环境中。示例如下:

# .env文件内容
SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/place
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=root
# 导出环境变量
export $(cat .env | xargs)

核心代码

以下是在Java代码中获取环境变量的示例:

import java.util.Map;

public class EnvVariableExample {
    public static void main(String[] args) {
        Map<String, String> env = System.getenv();
        String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");
        String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");
        String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST");
        String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");

        System.out.println("Password: " + password);
        System.out.println("Username: " + userName);
        System.out.println("SQL URL: " + sqlURL);
        System.out.println("SQL Port: " + sqlPort);
    }
}

最佳实践

  • 使用Spring Profiles:为不同的环境创建特定的配置文件,通过SPRING_PROFILES_ACTIVE环境变量来指定要使用的配置文件,提高配置的灵活性和可维护性。
  • 安全存储敏感信息:使用环境变量来存储敏感信息(如数据库密码),避免在代码库中硬编码这些信息,提高安全性。
  • 结合使用环境变量和Spring Profiles:在开发环境中使用静态配置信息,在生产环境中使用环境变量,这样开发人员在部署开发配置文件时无需在本地定义环境变量。

常见问题

1. 环境变量未生效

  • 检查环境变量是否正确设置:确保环境变量的名称和值正确,并且已经正确导出到环境中。
  • 重启IDE或应用程序:某些情况下,IDE或应用程序可能需要重新启动才能读取新的环境变量。

2. Flyway不识别直接环境变量

按照上述步骤创建.env文件,并将环境变量导出到环境中。

3. 无法在运行时更改活动配置文件

Spring在构建应用程序上下文时会确定活动配置文件,一旦应用程序启动,就无法更改活动配置文件。如果需要在运行时更改配置,可以考虑使用其他配置管理工具。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表