3種配置
打包插件
命令行
優先級
SpringBoot的配置優先級決定了不同配置源之間的覆蓋關系,遵循高優先級配置覆蓋低優先級的原則。以下是詳細的優先級排序及配置方法說明:
一、配置優先級從高到低排序
1.命令行參數
優先級最高,通過key=value形式傳遞,直接覆蓋其他配置。
java -jar tlias-web-management-0.0.1-SNAPSHOT.jar --server.port=8081
2.Java系統屬性(-D參數)
通過JVM參數設置,優先級僅次于命令行參數。
示例:
java -Dserver.port=8081 -jar tlias-web-management-0.0.1-SNAPSHOT.jar
3.操作系統環境變量
通過系統環境變量設置,例如SPRING_PROFILES_ACTIVE=dev。
示例(Linux/Mac):
export SERVER_PORT=8081
4.外部配置文件(JAR包外部的配置文件)
o目錄優先級:
?/config/目錄(JAR包同級) > 項目根目錄 > classpath:/config/ > classpath:/
o文件類型優先級:.properties > .yml > .yaml。
示例:
java -jar tlias-web-management-0.0.1-SNAPSHOT.jar --spring.config.location=file:/opt/config/application.yml
5.內部配置文件(JAR包內部的配置文件)
默認加載classpath:/application.properties或application.yml。若存在多個同名文件,按目錄優先級加載。
6.@PropertySource注解指定的配置文件
需在代碼中顯式指定配置文件路徑。
示例:
@Configuration
@PropertySource("classpath:custom.properties")
public class AppConfig {}
7.默認屬性(通過SpringApplication.setDefaultProperties設置)
代碼中設置的默認值,優先級最低。
二、特殊配置場景說明
1. Bootstrap配置文件
應用場景:Spring Cloud項目中用于加載配置中心信息(如spring.cloud.config.uri)。
*優先級:*bootstrap.properties > bootstrap.yml > application.properties > application.yml。
示例:
bootstrap.yml
spring.cloud.config.uri=http://config-server:8888
2. Profile-specific配置
?規則:通過application-{profile}.properties激活特定環境配置。
?示例:
java -jar tlias-web-management-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
3. 多配置源互補與覆蓋
?互補加載:所有配置源均被加載,不沖突的配置項會合并。
?覆蓋規則:高優先級配置覆蓋低優先級同名配置,如命令行參數覆蓋環境變量。
三、獲取配置方法實例
1.代碼中讀取:
@Value("${server.port}")
private String port;
2.配置類
@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig {private String param1;private int param2;private boolean param3;// ...// getters and setters
}
3. 動態刷新配置(結合Spring Cloud)
@RefreshScope
@RestController
public class ConfigController {@Value("${dynamic.config}")private String config;
}