SpringBoot版本:1.5.13.RELEASE
對(duì)應(yīng)官方文檔鏈接:https://docs.spring.io/spring-boot/docs/1.5.13.RELEASE/reference/htmlsingle/
CSDN鏈接:https://blog.csdn.net/zhichao_qzc/article/details/80698755
上一篇:SpringBoot 入門篇(三) SpringApplication
??SpringBoot外部配置屬性值的方式有很多種,SpringBoot為這多種配置方式指定了優(yōu)先級(jí)泌神,在屬性相同的情況下柴我,優(yōu)先級(jí)高的配置方式會(huì)覆蓋優(yōu)先級(jí)低的配置方式奔坟。當(dāng)然陨舱,如果屬性不相同,則這些配置方式中的屬性值都會(huì)被加載柳洋。
??SpringBoot官方文檔指明了這多種配置方式的優(yōu)先級(jí)叔汁,按照從高到低排序如下:
??(1)如果使用了Devtools,則優(yōu)先級(jí)最高的是在home目錄下指定的Devtools全局配置文件~/.spring-boot-devtools.properties(優(yōu)先級(jí)最高)乘碑。
??(2)測(cè)試用例中挖息,標(biāo)注了 @TestPropertySource 配置項(xiàng);
??(3)測(cè)試用例中兽肤,@SpringBootTest 注解中的 properties 屬性值套腹;
??(4)命令行參數(shù)绪抛;
??(5)內(nèi)嵌在環(huán)境變量或者系統(tǒng)變量中的SPRING_APPLICATION_JSON中的屬性值;
??(6)ServletConfig 初始化的參數(shù)电禀;
??(7)ServletContext 初始化的參數(shù)幢码;
??(8)java:comp/env 中的JNDI屬性值;
??(9)Java的系統(tǒng)變量尖飞,通過System.getProperties()方法獲戎⒏薄;
??(10)操作系統(tǒng)的環(huán)境變量葫松;
??(11)RandomValuePropertySource配置的${random.}屬性值瓦糕;
??(12)不在項(xiàng)目打成可執(zhí)行jar包中的application-{profile}.properties或者application-{profile}.yml文件;
??(13)項(xiàng)目打成可執(zhí)行jar包中的application-{profile}.properties或者application-{profile}.yml文件腋么;咕娄;
??(14)不在項(xiàng)目打成可執(zhí)行jar包中的application.properties或者application.yml文件;*
??(15)項(xiàng)目打成可執(zhí)行jar包中的application.properties或者application.yml文件珊擂;
??(16)同時(shí)標(biāo)注@Configuration和@PropertySource的類中圣勒,標(biāo)注了@PropertySource指定的屬性值;
??(17)在main方法中設(shè)置的SpringApplication.setDefaultProperties值(優(yōu)先級(jí)最低)摧扇。
??在下面的例子中圣贸,包含第(4)、(14)扛稽、(15)吁峻、(16)、(17)條中的屬性設(shè)置方式在张,這5種方式也是開發(fā)過程中用得最多的方式用含。需要說明的是,MyConfiguration 類中帮匾,使用@Value("${name}")來獲取外部配置的值啄骇。
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
Map<String,Object> proMap = new HashMap<String, Object>();
proMap.put("name","(17)在main方法中設(shè)置的SpringApplication.setDefaultProperties值。");
application.setDefaultProperties(proMap);
application.run(args);
}
@Autowired
private MyConfiguration myConfiguration;
@RequestMapping("/getName")
public String getName(){
return myConfiguration.getName();
}
}
/**
* Create by qiezhichao on 2018/6/14 0014 21:59
*/
@Configuration
@PropertySource(value= {"classpath:propertySource.properties"})
public class MyConfiguration {
// @Value("${name}")來獲取外部配置的值
@Value("${name}")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
??代碼結(jié)構(gòu)如圖
??配置命令行參數(shù)瘟斜,其中--spring.config.location=X:/application.properties表示加載本地磁盤X下的 application.properties 文件缸夹。
??執(zhí)行main方法,在瀏覽器輸入http://localhost:8080/getName 得到如下結(jié)果
??對(duì)于隨機(jī)值的配置螺句,官方文檔指明可以使用${random.*}(通常在application.properties或者application.yml文件中)來注入隨機(jī)值虽惭。
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
??對(duì)于命令行參數(shù),通過 java -jar app.jar --name="SpringBoot" --server.port=9090 的方式來傳遞參數(shù)蛇尚。參數(shù)用 --xxx=xxx 的形式傳入芽唇。如果我們想禁用命令行參數(shù),可以使用SpringApplication.setAddCommandLineProperties(false)的方法禁止命令行配置參數(shù)傳入佣蓉。
上一篇:SpringBoot 入門篇(三) SpringApplication
下一篇:SpringBoot 入門篇(五) SpringBoot的配置文件