下面我来详细讲解一下 Spring Boot 配置文件加载位置与优先级问题的攻略。
1. Spring Boot 配置文件的加载位置
Spring Boot 配置文件的加载位置非常灵活,可以根据不同的需求和情况进行配置。Spring Boot 配置文件的加载位置可以分为以下三种情况:
1.1 classpath下的默认加载位置
Spring Boot 默认会从 classpath 下的 /config
目录、/
目录、classpath:/config/
目录和 classpath:/
目录下加载名称为 application
的配置文件。其中优先级从高到低分别为 /config
目录、/
目录和 /config/
目录。
示例1:
# src/main/resources/application.properties
server.port=8080
1.2 指定配置文件路径
除了默认的加载位置外,还可以通过指定配置文件的路径来加载。例如,可以通过在项目启动时加入 JVM 参数 -Dspring.config.location
来指定配置文件的路径。
示例2:
java -jar -Dspring.config.location=/usr/local/config/application.properties myproject.jar
1.3 指定配置文件名称
除了默认的 application.properties
或 application.yml
文件外,还可以通过指定配置文件名称来加载其他的配置文件。例如,可以通过在项目启动时加入 JVM 参数 -Dspring.config.name
来指定配置文件的名称。
示例3:
java -jar -Dspring.config.name=myappconfig -Dspring.config.location=/usr/local/config/ myproject.jar
2. Spring Boot 配置文件的优先级
上面讲到了 Spring Boot 配置文件的加载位置,接下来我们来了解一下 Spring Boot 配置文件的优先级问题。Spring Boot 配置文件的优先级从高到低分别为:命令行参数、Java 系统属性、操作系统环境变量、application-{profile}.properties
或 application-{profile}.yml
、application.properties
或 application.yml
。
2.1 命令行参数
命令行参数和其他来源的属性设置会合并成同一个environment
。命令行参数的优先级最高。
示例4:
```shell script
java -jar myproject.jar --server.port=8080
### 2.2 Java 系统属性
可以通过在命令行启动 Java 时设置 `-D` 参数来设置 Java 系统属性。Java 系统属性的优先级高于操作系统环境变量。
示例5:
```shell script
java -jar myproject.jar -Dserver.port=8080
2.3 操作系统环境变量
可以通过设置操作系统环境变量来设置配置项的值,但是需要遵循相应的规则。例如:在 Linux 下环境变量的名称需要全部大写,变量名称中的句点(.)需要被转换为下划线(_),并且需要以 SPRING_PROFILES_ACTIVE
开头。环境变量的优先级高于 application-{profile}.properties
或 application-{profile}.yml
。
示例6:
```shell script
export SPRING_APPLICATION_JSON='{"server.port":8080}'
### 2.4 application-{profile} 属性文件
可以通过在配置文件名中添加`{profile}`来激活某个配置文件。`{profile}`的值可以通过spring.profiles.active属性来指定。例如,`application-test.properties` 文件将在测试环境中使用,`application-prod.properties` 文件将在生产环境中使用。`application-{profile}.properties` 或 `application-{profile}.yml` 的优先级高于 `application.properties` 或 `application.yml`。
示例7:
application-test.properties
server.port=8080
### 2.5 application.properties 或 application.yml
`application.properties` 或 `application.yml` 是默认的配置文件名,它们的作用范围是全局的,即所有的环境都会生效。这种方式的优先级最低。
示例8:
```yaml
# application.yml
server:
port: 8080
通过以上内容的介绍,相信大家已经对 Spring Boot 配置文件的加载位置与优先级问题有了更深入的了解。如果还有疑问,欢迎在评论区留言,我们一起来讨论。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 配置文件加载位置与优先级问题详解 - Python技术站