
配置文件
动态导入配置文件
在Spring Boot 2.4及以后的版本中,引入了一种新的方式来导入额外的配置,通过spring.config.import
属性。这个属性允许我们在application.properties
或application.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 格式(示例):propertiesDB_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.yml
和application-{profile}.properties
。
此配置让非标准文件名(如.env
)也能被加载。 - 环境隔离
将敏感配置(如数据库密码)从主配置分离到.env
文件,便于通过.gitignore
排除(避免提交到仓库)。 - 兼容性
许多工具(如 Docker)默认支持.env
文件,方便与现有 DevOps 流程集成。
典型使用场景
项目结构
my-project/
├── .env # 存放敏感配置(被 .gitignore 排除)
├── application.properties # 主配置文件
└── src/
└── main/...
配置示例
.env
文件内容propertiesSPRING_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}