Java互聯網架構-Spring Boot框架如何配置文件分析
概述
什麼是spring boot
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。用我的話來理解,就是spring boot其實不是什麼新的框架,它默認配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道這樣比喻是否合適)。
使用spring boot有什麼好處
其實就是簡單、快速、方便!平時如果我們需要搭建一個spring web項目的時候需要怎麼做呢?
1)配置web.xml,加載spring和spring mvc
2)配置數據庫連接、配置spring事務
3)配置加載配置文件的讀取,開啟註解
4)配置日誌文件
配置完成之後部署tomcat 調試
1、小試牛刀
1.1 隨機數
Spring Boot提供了RandomValuePropertySource幫助開發者在配置文件中直接生成隨機值,它很多場景都有用武之地,比如密鑰、測試用例等。這些隨機值可以是整數,longs或字符串,我們只需要在配置文件中定義即可:
#隨機字符串
buke.secret=${random.value}
#隨機int類型數字
buke.number=${random.int}
#隨機long類型數字
buke.bignumber=${random.long}
#隨機最大值
buke.ten=${random.int(10)}
#隨機範圍值
buke.range=${random.int[1024,65536]}
需要注意的是,每次配置文件加載後(即SpringApplication啟動run後),生成的隨機數編程固定值,除非再次重啟才會變更。
1.2 使用配置
使用也簡單,像如下代碼一樣,只需要在想要綁定自定義值的屬性上添加註解@Value(value = "${property}")即可。
@Value(value = "${buke.secret}")
public String secret;
1.3 綁定實體類
使用@Value("${property}")註解方式注入配置屬性有時候可能顯得比較笨重麻煩,尤其是需要使用多個properties或需要使用的數據本身有層次結構的時候。為了控制和property項目配置,Spring Boot提供一個允許使用自定義beans的替代方法來使用properties。
/**
* 自定義配置屬性綁定實體
* @author 漆可
* @date 2017年9月12日 下午8:30:35
*/
@Component
@ConfigurationProperties(prefix = "buke")
public class ConfigBean
{
private String secret;
private int number;
private long bignumber;
private int less;
private int range;
//getters setters ...
}
1.4 測試效果
我們寫個接口,測試綁定效果:
@RestController
public class ProperfileController
{
@Autowired
ConfigBean configBean;
@RequestMapping("/test")
public Object test()
{
Map<String, Object> map = new HashMap<>();
map.put("secret", configBean.getSecret());
map.put("number", configBean.getNumber());
map.put("bignumber", configBean.getBignumber());
map.put("less", configBean.getLess());
map.put("range", configBean.getRange());
return map;
}
}
上述代碼的只做了一件事情,獲取在配置文件中定義的隨機值,並通過接口放回給前端頁面顯示:
這裡寫圖片描述
1.5 替換者Yaml
Spring Boot支持並推薦使用Yaml配置文件。Yaml是Json的一個超集,與properties相比,它擁有數據的層級結構,又比XMl文件結構簡單。
注意字段分號:後面要加一個空格,不然無法讀取到該值。將上述application.properties文件改為Yaml格式的application.yml:
buke:
secret: ${random.value}
bignumber: ${random.long}
less: ${random.int(10)}
range: ${random.int[1024,65536]}
number: ${random.int}
需要指出的是,同級目錄上,properties配置的屬性會覆蓋Yaml屬性,而不是有些網上所說的Yaml覆蓋前者。
2 通過命令行設置屬性值
Spring Boot允許外化(externalize)項目配置,即不依靠項目本身的文件就可以改變、覆蓋的項目原先的配置文件內容,方便我們在不同的環境執行不同的配置內容。最常用的就是通過命令行修改配置參數。
在使用命令行運行jar包部署Spring Boot應用的時候,可以使用命令行設置屬性值。
java -jar xxx.jar --server.port=8090
如上命令行通過使用--server.port屬性設置xxx.jar應用的端口為8090。
在命令行運行時,採用--xxx=xxx的格式設置設置屬性值。連續的兩個減號--就是對application.properties中的屬性值進行賦值的標識。以上命令等價於我們在application.properties中添加屬性server.port=8090。可設置的的屬性值可以是我們自己定義的,也可以是Spring Boot中默認的參數。
通過命令行來修改屬性值固然提供了不錯的便利性,但是通過命令行就能更改應用運行的參數也是一種不安全的行為。我們可以在程序的啟動入口加上SpringApplication.setAddCommandLineProperties(false)來禁用命令行傳參。
3 應用的配置文件
3.1 應用文件的位置
spring會從以下位置加載application.properties或application.yml配置文件:
當前目錄下的一個/config子目錄
當前目錄
一個classpath下的/config包
classpath根路徑(root)
這個列表是按優先級排序的(列表中前面的將覆蓋後面的)。
3.2 修改配置文件名稱
我們可以通過重寫spring.config.name的值來修改配置文件的名稱application。
通過命令修改配置文件名稱:
$ java -jar xxx.jar --spring.config.name=myprofile
通過配置文件修改配置文件名稱:
spring.config.name=myprofile
或者這樣:
spring:
config:
name: myprofile
3.3 修改配置文件路徑
我們可以重寫spring.config.location指定配置文件具體的路徑(目錄位置或文件路徑列表以逗號分割)。
$ java -jar xxx.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
如果spring.config.location包含目錄(相對於文件),必須以/結尾表示該配置是個目錄,在加載前,spring.config.name配置的文件名稱會被追加到後面。
不管spring.config.location配置的是什麼值,默認的配置文件路徑classpath:,classpath:/config,file:,file:config/都會被使用。
這樣可以方便開發者,在該路徑路徑設置一些默認值,然後在運行的時候使用不同的文件覆蓋它,同時保留這些默認配置。
4、多環境配置
4.1 定義
我們在開發web項目時,通常同一套程序會被應用和安裝到幾個不同的環境,比如:開發、測試、生產等。當應用程序需要部署到不同運行環境時,一些配置細節通常會有所不同,最簡單的比如日誌級別,數據庫地址、服務器端口。這就使得我們在打包的時候頻繁的修改配置文件。
Profile配置,坊間戲稱多環境配置,也叫隔離環境配置。它是一種強大的配置方式,解決了我們以往由於不同的環境配置頻繁大量修改配置文件的問題。
4.2 多環境配置的方法
在Spring Boot中多環境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識,比如:
application-dev.properties:開發環境
application-test.properties:測試環境
application-prod.properties:生產環境
想要加載某個配置文件,只需要在application.properties文件中通過spring.profiles.active屬性來設置,其值對應指定配置文件的{profile}值。
spring.profiles.active=test
比如: 以上設置就會加載application-test.properties配置文件內容。
當然,也可以通過命令行指定具體配置文件。
java -jar xxx.jar --spring.profiles.active=test
總結
到這裡,Spring Boot框架如何配置文件分析就結束了,,不足之處還望大家多多包涵!!覺得收穫的話可以點個關注收藏轉發一波喔,謝謝大佬們支持。(吹一波,233~~)
下面和大家交流幾點編程的經驗:
1、多寫多敲代碼,好的代碼與紮實的基礎知識一定是實踐出來的
2丶 測試、測試再測試,如果你不徹底測試自己的代碼,那恐怕你開發的就不只是代碼,可能還會聲名狼藉。
3丶 簡化編程,加快速度,代碼風騷,在你完成編碼後,應回頭並且優化它。從長遠來看,這裡或那裡一些的改進,會讓後來的支持人員更加輕鬆。
最後,每一位讀到這裡的網友,感謝你們能耐心地看完。希望在成為一名更優秀的Java程序員的道路上,我們可以一起學習、一起進步。
內部交流群469717771 歡迎各位前來交流和分享, 驗證:(007)
概述
什麼是spring boot
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。用我的話來理解,就是spring boot其實不是什麼新的框架,它默認配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道這樣比喻是否合適)。
使用spring boot有什麼好處
其實就是簡單、快速、方便!平時如果我們需要搭建一個spring web項目的時候需要怎麼做呢?
1)配置web.xml,加載spring和spring mvc
2)配置數據庫連接、配置spring事務
3)配置加載配置文件的讀取,開啟註解
4)配置日誌文件
配置完成之後部署tomcat 調試
1、小試牛刀
1.1 隨機數
Spring Boot提供了RandomValuePropertySource幫助開發者在配置文件中直接生成隨機值,它很多場景都有用武之地,比如密鑰、測試用例等。這些隨機值可以是整數,longs或字符串,我們只需要在配置文件中定義即可:
#隨機字符串
buke.secret=${random.value}
#隨機int類型數字
buke.number=${random.int}
#隨機long類型數字
buke.bignumber=${random.long}
#隨機最大值
buke.ten=${random.int(10)}
#隨機範圍值
buke.range=${random.int[1024,65536]}
需要注意的是,每次配置文件加載後(即SpringApplication啟動run後),生成的隨機數編程固定值,除非再次重啟才會變更。
1.2 使用配置
使用也簡單,像如下代碼一樣,只需要在想要綁定自定義值的屬性上添加註解@Value(value = "${property}")即可。
@Value(value = "${buke.secret}")
public String secret;
1.3 綁定實體類
使用@Value("${property}")註解方式注入配置屬性有時候可能顯得比較笨重麻煩,尤其是需要使用多個properties或需要使用的數據本身有層次結構的時候。為了控制和property項目配置,Spring Boot提供一個允許使用自定義beans的替代方法來使用properties。
/**
* 自定義配置屬性綁定實體
* @author 漆可
* @date 2017年9月12日 下午8:30:35
*/
@Component
@ConfigurationProperties(prefix = "buke")
public class ConfigBean
{
private String secret;
private int number;
private long bignumber;
private int less;
private int range;
//getters setters ...
}
1.4 測試效果
我們寫個接口,測試綁定效果:
@RestController
public class ProperfileController
{
@Autowired
ConfigBean configBean;
@RequestMapping("/test")
public Object test()
{
Map<String, Object> map = new HashMap<>();
map.put("secret", configBean.getSecret());
map.put("number", configBean.getNumber());
map.put("bignumber", configBean.getBignumber());
map.put("less", configBean.getLess());
map.put("range", configBean.getRange());
return map;
}
}
上述代碼的只做了一件事情,獲取在配置文件中定義的隨機值,並通過接口放回給前端頁面顯示:
這裡寫圖片描述
1.5 替換者Yaml
Spring Boot支持並推薦使用Yaml配置文件。Yaml是Json的一個超集,與properties相比,它擁有數據的層級結構,又比XMl文件結構簡單。
注意字段分號:後面要加一個空格,不然無法讀取到該值。將上述application.properties文件改為Yaml格式的application.yml:
buke:
secret: ${random.value}
bignumber: ${random.long}
less: ${random.int(10)}
range: ${random.int[1024,65536]}
number: ${random.int}
需要指出的是,同級目錄上,properties配置的屬性會覆蓋Yaml屬性,而不是有些網上所說的Yaml覆蓋前者。
2 通過命令行設置屬性值
Spring Boot允許外化(externalize)項目配置,即不依靠項目本身的文件就可以改變、覆蓋的項目原先的配置文件內容,方便我們在不同的環境執行不同的配置內容。最常用的就是通過命令行修改配置參數。
在使用命令行運行jar包部署Spring Boot應用的時候,可以使用命令行設置屬性值。
java -jar xxx.jar --server.port=8090
如上命令行通過使用--server.port屬性設置xxx.jar應用的端口為8090。
在命令行運行時,採用--xxx=xxx的格式設置設置屬性值。連續的兩個減號--就是對application.properties中的屬性值進行賦值的標識。以上命令等價於我們在application.properties中添加屬性server.port=8090。可設置的的屬性值可以是我們自己定義的,也可以是Spring Boot中默認的參數。
通過命令行來修改屬性值固然提供了不錯的便利性,但是通過命令行就能更改應用運行的參數也是一種不安全的行為。我們可以在程序的啟動入口加上SpringApplication.setAddCommandLineProperties(false)來禁用命令行傳參。
3 應用的配置文件
3.1 應用文件的位置
spring會從以下位置加載application.properties或application.yml配置文件:
當前目錄下的一個/config子目錄
當前目錄
一個classpath下的/config包
classpath根路徑(root)
這個列表是按優先級排序的(列表中前面的將覆蓋後面的)。
3.2 修改配置文件名稱
我們可以通過重寫spring.config.name的值來修改配置文件的名稱application。
通過命令修改配置文件名稱:
$ java -jar xxx.jar --spring.config.name=myprofile
通過配置文件修改配置文件名稱:
spring.config.name=myprofile
或者這樣:
spring:
config:
name: myprofile
3.3 修改配置文件路徑
我們可以重寫spring.config.location指定配置文件具體的路徑(目錄位置或文件路徑列表以逗號分割)。
$ java -jar xxx.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
如果spring.config.location包含目錄(相對於文件),必須以/結尾表示該配置是個目錄,在加載前,spring.config.name配置的文件名稱會被追加到後面。
不管spring.config.location配置的是什麼值,默認的配置文件路徑classpath:,classpath:/config,file:,file:config/都會被使用。
這樣可以方便開發者,在該路徑路徑設置一些默認值,然後在運行的時候使用不同的文件覆蓋它,同時保留這些默認配置。
4、多環境配置
4.1 定義
我們在開發web項目時,通常同一套程序會被應用和安裝到幾個不同的環境,比如:開發、測試、生產等。當應用程序需要部署到不同運行環境時,一些配置細節通常會有所不同,最簡單的比如日誌級別,數據庫地址、服務器端口。這就使得我們在打包的時候頻繁的修改配置文件。
Profile配置,坊間戲稱多環境配置,也叫隔離環境配置。它是一種強大的配置方式,解決了我們以往由於不同的環境配置頻繁大量修改配置文件的問題。
4.2 多環境配置的方法
在Spring Boot中多環境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識,比如:
application-dev.properties:開發環境
application-test.properties:測試環境
application-prod.properties:生產環境
想要加載某個配置文件,只需要在application.properties文件中通過spring.profiles.active屬性來設置,其值對應指定配置文件的{profile}值。
spring.profiles.active=test
比如: 以上設置就會加載application-test.properties配置文件內容。
當然,也可以通過命令行指定具體配置文件。
java -jar xxx.jar --spring.profiles.active=test
總結
到這裡,Spring Boot框架如何配置文件分析就結束了,,不足之處還望大家多多包涵!!覺得收穫的話可以點個關注收藏轉發一波喔,謝謝大佬們支持。(吹一波,233~~)
下面和大家交流幾點編程的經驗:
1、多寫多敲代碼,好的代碼與紮實的基礎知識一定是實踐出來的
2丶 測試、測試再測試,如果你不徹底測試自己的代碼,那恐怕你開發的就不只是代碼,可能還會聲名狼藉。
3丶 簡化編程,加快速度,代碼風騷,在你完成編碼後,應回頭並且優化它。從長遠來看,這裡或那裡一些的改進,會讓後來的支持人員更加輕鬆。
最後,每一位讀到這裡的網友,感謝你們能耐心地看完。希望在成為一名更優秀的Java程序員的道路上,我們可以一起學習、一起進步。
內部交流群469717771 歡迎各位前來交流和分享, 驗證:(007)