Skip to content
鼓励作者:欢迎打赏犒劳

配置文件

动态导入配置文件

在Spring Boot 2.4及以后的版本中,引入了一种新的方式来导入额外的配置,通过spring.config.import属性。这个属性允许我们在application.propertiesapplication.yml中声明要导入的配置文件。

这个配置 spring.config.import=optional:file:.env[.properties] 是 Spring Boot 2.4+ 引入的新特性,用于动态导入配置文件。下面详细解释其含义和作用:

配置语法解析

  • optional:file:.env[.properties] 可拆解为三部分:
    • optional:
      表示文件是可选的。如果 .env 文件不存在,应用不会报错,会正常启动(忽略缺失的文件)。
    • file:
      表示从文件系统(而非 classpath)加载文件。默认从项目根目录(工作目录)查找文件。
    • .env[.properties]
      • .env:要加载的文件名(无后缀)。
      • [.properties]:显式指定文件格式为 Properties 格式(键值对)。
        即使文件没有后缀,也会按 .properties 语法解析。

实际效果

  • 加载根目录下的 .env 文件
    Spring Boot 会尝试从项目启动时的当前工作目录(通常是项目根目录)加载 .env 文件。
  • 解析为 Properties 格式
    文件内容会被解析为标准 Properties 格式(示例):
    properties
    DB_URL=jdbc:mysql://localhost:3306/mydb
    DB_USER=root
    DB_PASSWORD=123456
  • 注入到 Spring Environment
    文件中的配置(如 DB_URL)会并入 Spring 环境变量,可通过 @Value("${DB_URL}")Environment 对象获取。

为什么需要这样配置?

  • 突破默认规则
    Spring Boot 默认只加载 application.properties/application.ymlapplication-{profile}.properties
    此配置让非标准文件名(如 .env)也能被加载。
  • 环境隔离
    将敏感配置(如数据库密码)从主配置分离到 .env 文件,便于通过 .gitignore 排除(避免提交到仓库)。
  • 兼容性
    许多工具(如 Docker)默认支持 .env 文件,方便与现有 DevOps 流程集成。

典型使用场景

项目结构

my-project/
├── .env                # 存放敏感配置(被 .gitignore 排除)
├── application.properties  # 主配置文件
└── src/
    └── main/...

配置示例

  • .env 文件内容
    properties
    SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb
    SPRING_DATASOURCE_USERNAME=admin
    SPRING_DATASOURCE_PASSWORD=secret
  • application.properties 内容
    properties
    # 导入 .env 文件
    spring.config.import=optional:file:.env[.properties]
    
    # 使用 .env 中的变量
    spring.datasource.url=${SPRING_DATASOURCE_URL}
    spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
    spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}

如有转载或 CV 的请标注本站原文地址