spring boot 使用屬性載入順序
阿新 • • 發佈:2019-01-08
1.命令列中傳入的引數
2.SPRING_APPLICATION_JSON中的屬性。SPRING_APPLICATION_JSON是以JSON格式配置再系統環境變數中的內容
3.java:comp/env中的JNDI屬性
4.JAVA的屬性,可以通過System.getProperties() 獲得的內容
5.作業系統的環境變數
6.通過random.*配置的隨機屬性
7.位於當前應用jar包之外,針對不同{profile}環境的配置檔案內容,例如application-{profile}.properties或YAML定義的配置檔案
8.位於當前應用jar包之內,針對不同{profile}環境的配置檔案內容,例如application-{profile}.properties或YAML定義的配置檔案。
9.位於當前應用jar包之外的application.properties或YAML配置內容
10.位於當前應用jar包之內的application.properties或YAML配置內容
11.在@Configuration註解修改的類中,通過@PropertySource註解定義的屬性
12.應用預設屬性,使用SpringApplication.setDefaultProperties定義的內容
對於使用 spring cloud的應用,會在載入 application.properties 前載入 bootstrap.properties
載入的原始碼位於:org.springframework.cloud.bootstrap.BootstrapApplicationListener
public static final String BOOTSTRAP_PROPERTY_SOURCE_NAME = "bootstrap"; public static final int DEFAULT_ORDER = -2147483643; public static final String DEFAULT_PROPERTIES = "defaultProperties"; private int order = -2147483643; public BootstrapApplicationListener() { } public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { ConfigurableEnvironment environment = event.getEnvironment();if(((Boolean)environment.getProperty("spring.cloud.bootstrap.enabled", Boolean.class, Boolean.valueOf(true))).booleanValue()) { if(!environment.getPropertySources().contains("bootstrap")) { ConfigurableApplicationContext context = null; String configName = environment.resolvePlaceholders("${spring.cloud.bootstrap.name:bootstrap}"); Iterator var5 = event.getSpringApplication().getInitializers().iterator(); while(var5.hasNext()) { ApplicationContextInitializer<?> initializer = (ApplicationContextInitializer)var5.next(); if(initializer instanceof ParentContextApplicationContextInitializer) { context = this.findBootstrapContext((ParentContextApplicationContextInitializer)initializer, configName); } } if(context == null) { context = this.bootstrapServiceContext(environment, event.getSpringApplication(), configName); } this.apply(context, event.getSpringApplication(), environment); } } }