一、SpringBoot配置文件的加载位置。
SpringBoot启动会扫描以下位置的application.properties
或者application.yml
文件作为Spring Boot的默认配置文件。
- file:./config/
- file:./
- classpath:/config/
- classpath:/
注:以上是按照优先级从高到低
的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置的内容。
可以通过配置spring.config.location
来改变默认的配置。
下面新建一个项目进行演示:(默认的配置文件是第四种方式)
为上述的(1)(2)(3)(4)配置文件中分别配置端口号:
(1)server.port=8084
(2)server.port=8083
(3)server.port=8082
(4)server.port=8081
启动项目:由第一种方式的优先级最高.
注:SpringBoot会从这四个位置全部加载主配置文件,相同的配置优先级高的会覆盖优先级低的。
如果同一个目录下,既有application.yml
又有application.properties
,默认先读取application.properties。
配置参数互补示例:
其次我们编写一个Controller:
package com.example.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/sayHello")
public String sayHello(){
return "hello World";
}
}
启动项目:
项目启动的端口还是使用的是最外层config目录下配置文件的端口8084;项目的访问路径发生变化。
通过配置spring.config.location
来改变默认的配置。
示例:
--spring.config.location=d:/application.properties
通过命令指定配置文件的路径,并且指定路径下端口为8087。
java -jar springboot-05-0.0.1-SNAPSHOT.jar --spring.config.location=E:/application.properties
把项目打成jar包:
二、SpringBoot的外部配置加载顺序
Spring Boot支持多种外部配置方式:
- 命令行参数
- java -jar xxxxx.jar(项目包) --server.prot=8081
- 可以通过类似的方式修改配置
- 来自java:comp/env的NDI属性
- Java系统属性(System.getProperties())
- 操作系统环境变量
- RandomValuePropertySource配置的random.*属性值
- jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- jar包外部的application.properties或application.yml(不带spring.profile)配置文件
- jar包内部的application.properties或application.yml(不带spring.profile)配置文件
- @Configuration注解类上的@PropertySource
- 通过SpringApplication.setDefaultProperties指定的默认属性