摘要:1、Spring Boot的屬性設定檔1.1 Spring Boot的屬性設定檔的第一個形式使用properties設定文件,如下兩個屬性的意義是更改存取埠為8081,並且加了一個contextPath,可以理解為在網址列多加層位址。 server.port= ...
使用兩個為屬性的設定檔,如以下設定檔8081,並且加了一個contextPath,可以理解為在網址列多加層位址。
server.port=8081 server.context-path=/joyou
右鍵點選DemoApplication.java -》Run As ——》Spring Boot App啟動程式
## 8081
瀏覽器存取效果如下。
補充:
# Spring Boot 提供的 SpringApplication 類別會搜尋並載入 application.properties 檔案來取得配置屬性值。 SpringApplication 類別會在下方位置搜尋該檔案:
#1.目前目錄的/config子目錄
2.目前目錄
#3.classpath 中的/config套件
4.classpath
上面的順序也表示了該位置上包含的屬性檔案的優先權。優先順序按照從高到低的順序排列。
#可以透過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 所提供的設定優先順序較為複雜。按照優先順序從高到低的順序,具體的清單(從高到低)如下所示。
# 1.且指令列參數(優先順序最高)。
2.以 System.getProperties() 所取得的 Java 系統參數。
3。作業系統環境變數。
4.以 java:comp/env 所得的 JNDI 屬性。
5.經由 RandomValuePropertySource 產生的random.*屬性。
6.jar包外部的application-{profile}.properties或application.yml(帶spring.profile)設定文件,透過spring.config.location參數指定
7.jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不含spring.profile)設定檔
##########################################################################################################################################9.jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
10.應用Java配置類,且包含@Configuration註解的Java 類別,透過@PropertySource註解聲明的屬性檔案。
11.以SpringApplication.setDefaultProperties宣告的預設屬性。
如果Spring Boot在優先順序較高的位置找到了配置,那麼它就會忽略優先順序較低的配置。下面我們簡單來講講這些優先順序。 Spring Boot 的這個配置優先順序看似複雜,其實是很合理的。命令列參數的優先權之所以被設定為最高,是因為可以方便我們在測試或生產環境中快速地修改配置參數值,而不需要重新打包和部署應用。
SpringApplication 類別預設會以「--」開頭的命令列參數轉換為應用程式中可使用的參數,如“--name=Alex” 會設定配置參數“name” 的值為“Alex”。
如果不需要此功能,可透過SpringApplication.setAddCommandLineProperties(false)
#停用解析命令列參數。
#
在实际开发过程中,需要程序去配置文件中读取数据(如:URL,一些账号密码等),所以就需要我们来自定义属性,供程序读取。
首先在yml里自定一个属性,格式如下:
company: joyouemployee: 二十岁以后
在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;@RestControllerpublic class HelloSpringBoot { @Value("${company}") private String company; @Value("${employee}") private String employee; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return company+"====="+employee; } }
使用浏览器访问效果如下
# 2.2 在自訂屬性中呼叫其他屬性
# 2.2 在自訂屬性中調用其他屬性####### #### ###yml檔案中的設定company: joyouemployee: 二十岁以后 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;@RestControllerpublic 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方法,需要使用两个注解:
@Component //如果没有这个注解,会报找不到Bean的错
@ConfigurationProperties(prefix="Girl") //找到以Girl开头的属性
然后在java程序中注入Gril类
package com.example.demo;@RestControllerpublic class HelloSpringBoot { @Autowired private Girl girl; @RequestMapping(value="/hello" , method = RequestMethod.GET) public String HelloSpring(){ return girl.toString(); } }
启动程序,刷新浏览器,效果如下:
#############################################################3.1 ###### 將既然都這麼說了,那當然是不用的了。我們可以在開發時候就寫好兩套環境中對於屬性值不同需求的yml文件,然後在調用需要的yml文件就好了。 ###
對生產環境Girl的屬性值如下:
# # 我只需要在application.yml中調用不同的文件就好了,dev這個值是我開發和生產環境不同yml文件的後綴名(
注意看上面兩個圖文件的命名)
瀏覽器對應的結果
第二種環境對應的配置
瀏覽器對應的結果
以上是Spring Boot框架的知識點詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!