使用properties配置文件,以下兩個屬性的含義是更改訪問端口爲8081,而且加了一個contextPath,能夠理解爲在地址欄多加層地址。html
server.port=8081 server.context-path=/joyou
右鍵點擊DemoApplication.java ——》Run As ——》Spring Boot App啓動程序java
效果以下,首先從日誌上看,端口已經變爲8081web
瀏覽器訪問效果以下。spring
補充:瀏覽器
屬性文件是最多見的管理配置屬性的方式。Spring Boot 提供的 SpringApplication 類會搜索並加載 application.properties 文件來獲取配置屬性值。SpringApplication 類會在下面位置搜索該文件:app
1.當前目錄的/config子目錄 dom
2.當前目錄 spring-boot
3.classpath 中的/config包 測試
4.classpathspa
上面的順序也表示了該位置上包含的屬性文件的優先級。優先級按照從高到低的順序排列。
能夠經過spring.config.name這個key的配置屬性來指定不一樣的屬性文件名稱。也能夠經過spring.config.location來添加額外的屬性文件的搜索路徑。
使用yml方式配置,在resources目錄下創建application.yml文件。代碼以下。
server: port: 8082 context-path: /joyou
效果與1.1相同。
補充:
相對於屬性文件來講,YAML 是一個更好的配置文件格式。當有前綴的狀況下,使用.yml格式的配置文件更簡單。
注意:使用.yml時,屬性名的值和冒號中間必須有空格,如name: SpringBoot正確,SpringBoot就是錯的。
YAML 在 Ruby on Rails 中獲得了很好的應用。YAML是JSON的一個超集,也是一種方便的定義層次配置數據的格式。它的基本語法規則以下:
在SpringBoot官網文檔給出了詳盡的配置以及說明。在Appendix A. Common application properties中:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#common-application-properties
不徹底統計,這個完整的application properties文件,有1183行。其中,屬性key有950個。當你看到如此龐大的配置,你必定會被嚇到。不過,在實際項目中,咱們若是遵循Spring Boot的約定,一般不須要咱們單獨指定太多配置。
Spring Boot提供了一種優先級配置讀取的機制來幫助咱們從這種困境中走出來。
Spring Boot 所提供的配置優先級順序比較複雜。按照優先級從高到低的順序,具體的列表(從高到低)以下所示。
若是Spring Boot在優先級更高的位置找到了配置,那麼它就會忽略優先級低的配置。下面咱們簡單講講這些優先級。Spring Boot 的這個配置優先級看似複雜,實際上是很合理的。命令行參數的優先級之因此被設置爲最高,是由於能夠方便咱們在測試或生產環境中快速地修改配置參數值,而不須要從新打包和部署應用。
SpringApplication 類默認會把以「--」開頭的命令行參數轉化成應用中可使用的配置參數,如 「--name=Alex」 會設置配置參數 「name」 的值爲 「Alex」。
若是不須要這個功能,能夠經過SpringApplication.setAddCommandLineProperties(false)
禁用解析命令行參數。
在實際開發過程當中,須要程序去配置文件中讀取數據(如:URL,一些帳號密碼等),因此就須要咱們來自定義屬性,供程序讀取。
首先在yml裏自定一個屬性,格式以下:
company: joyou employee: 二十歲之後
在Java程序中取值,代碼以下:
package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloSpringBoot { @Value("${company}") private String company; @Value("${employee}") private String employee; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return company+"====="+employee; } }
使用瀏覽器訪問效果以下
yml文件中的配置
company: joyou employee: 二十歲之後 All: "公司: ${company} , 員工: ${employee}"
在JAVA程序中注入All屬性
package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloSpringBoot { @Value("${All}") private String All; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return All; } }
效果如圖所示:
看了上面的例子後,會產生一個疑問,若是想一次調用10個、20個、50個屬性值,難道我要在程序中注入50次值,使用50次註解嗎? 爲了解決這個疑問,Spring Boot 是這麼解決的!
首先一個女孩,有身高、體重、罩杯等等屬性,咱們能夠這樣來寫!
Girl: High: 160CM Weight: 80KG CupSize: 30A
而後寫一個類,這個類中提供Girl的屬性,及Setter,Geter方法,須要使用兩個註解:
而後在java程序中注入Gril類
package com.example.demo; @RestController public class HelloSpringBoot { @Autowired private Girl girl; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return girl.toString(); } }
啓動程序,刷新瀏覽器,效果以下:
面對生產與開發的不一樣場景,對於一些屬性的值可能不一樣,難道我要在開發環境寫的屬性值,到生產環境在一個一個改嗎?既然都這麼說了,那固然是不用的了。咱們能夠在開發時候就寫好兩套環境中對於屬性值不一樣需求的yml文件,而後在調用須要的yml文件就行了。
對於生產環境Girl的屬性值以下:
對於開發環境Girl的屬性值以下:
我只須要在application.yml中調用不一樣的文件就行了,dev這個值是我開發和生產環境不一樣yml文件的後綴名(注意看上面兩個圖文件的命名)
瀏覽器對應的結果
第二種環境對應的配置
瀏覽器對應的結果