SpringBoot——配置文件加载位置

本文详细介绍了SpringBoot启动时如何加载配置文件,包括不同位置的application.properties或application.yml文件及其优先级顺序。同时,还介绍了如何通过spring.config.location属性自定义配置文件的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot启动会扫描以下位置的application.properties或者spplication.yml文件作为springboot的默认配置文件。

-file:./config/
|-file:./
|-classpath:/config/
-classpath:/

 以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖(覆盖部分)低优先级的配置内容。

当然,也可以通过配置spring.config.location来改变默认配置,springboot会从这四个位置读取配置文件,并不是高优先级先读取了便不再读取。

### Spring Boot 运行时配置文件加载顺序 Spring Boot 的运行时配置文件加载机制遵循一定的优先级规则,这些规则决定了哪些属性会覆盖其他属性。以下是详细的加载顺序: #### 配置文件加载顺序 1. **命令行参数** 命令行参数具有最高优先级,可以用来动态修改应用的行为。例如,在启动应用程序时可以通过 `--server.port=9090` 来设置端口[^1]。 2. **来自 java:comp/env 的 JNDI 属性** 如果项目部署在支持 JNDI 的环境中(如 Tomcat 或 WebLogic),JNDI 中定义的属性会被加载并应用于配置中[^3]。 3. **Java 系统属性 (System.getProperties())** Java 虚拟机启动时传递的 `-D` 参数也会被解析为系统属性的一部分,并参与配置加载过程。 4. **操作系统环境变量** 操作系统的环境变量同样会影响 Spring Boot 应用程序的配置行为。需要注意的是,环境变量通常以大写字母表示,并通过下划线 `_` 替代点号 `.`。 5. **RandomValuePropertySource 配置的 random.* 属性** Spring Boot 提供了一种随机值注入的方式,比如 `random.int`, `random.long`, 和 `random.uuid`,它们可以在测试或其他场景中生成临时数据。 6. **打包 jar 外部的应用程序配置文件 (`application.properties` 或 `application.yml`)** - 当前目录下的 `/config` 文件夹内的配置文件。 - 当前目录下的配置文件。 7. **打包 jar 内部的应用程序配置文件 (`application.properties` 或 `application.yml`)** - 类路径根目录下的 `/config` 文件夹内的配置文件。 - 类路径根目录下的配置文件。 8. **@Configuration 注解类上的 @PropertySource** 开发者可以通过自定义注解来引入额外的 `.properties` 文件,这种方式允许更灵活地管理外部化配置。 9. **默认属性 (由 SpringApplication.setDefaultProperties 指定)** 默认属性是在没有任何显式配置的情况下使用的后备选项。开发者也可以通过编程方式调整这一部分的内容[^3]。 --- #### 示例代码展示加载逻辑 下面是一个简单的例子,演示如何利用不同的配置源影响最终的结果: ```java @SpringBootApplication public class DemoApplication { public static void main(String[] args) { System.setProperty("my.custom.property", "value-from-system-property"); SpringApplication.run(DemoApplication.class, "--my.custom.property=value-from-command-line"); } @Bean public CommandLineRunner commandLineRunner(Environment env) { return args -> { String value = env.getProperty("my.custom.property"); System.out.println("Loaded property value: " + value); }; } } ``` 在这个案例中,“my.custom.property”的实际取值取决于不同来源之间的优先级关系。如果存在冲突,则按照上述列表中的次序决定哪个值生效[^1]。 --- #### 注意事项 - 不同类型的配置文件可能共存于同一个项目里,但只有符合特定条件的那个才会被激活。例如,当设置了 `spring.profiles.active=dev` 后,仅对应开发环境的 profile-specific 配置会被读取。 - 对于 YAML 格式的多文档块结构,其处理方法类似于 profiles 功能——即每个 document 可能代表一种独立的状态或模式切换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值