首頁  >  文章  >  後端開發  >  Spring Boot框架的知識點詳解

Spring Boot框架的知識點詳解

巴扎黑
巴扎黑原創
2017-08-16 09:37:324853瀏覽


摘要:1、Spring Boot的屬性設定檔1.1 Spring Boot的屬性設定檔的第一個形式使用properties設定文件,如下兩個屬性的意義是更改存取埠為8081,並且加了一個contextPath,可以理解為在網址列多加層位址。 server.port= ...

1、Spring Boot的屬性設定檔

        1.1 Spring Boot的屬性設定檔的第一個形式

            使用兩個為屬性的設定檔,如以下設定檔8081,並且加了一個contextPath,可以理解為在網址列多加層位址。

server.port=8081
server.context-path=/joyou

                右鍵點選DemoApplication.java -》Run As ——》Spring Boot App啟動程式

## 8081Spring Boot框架的知識點詳解

            瀏覽器存取效果如下。 Spring Boot框架的知識點詳解

    Spring Boot框架的知識點詳解

            補充:

  #  Spring Boot 提供的 SpringApplication 類別會搜尋並載入 application.properties 檔案來取得配置屬性值。 SpringApplication 類別會在下方位置搜尋該檔案:

#1.目前目錄的/config子目錄

2.目前目錄

#3.classpath 中的/config套件

4.classpath

上面的順序也表示了該位置上包含的屬性檔案的優先權。優先順序按照從高到低的順序排列。

#

可以透過spring.config.name這個key的設定屬性來指定不同的屬性檔名稱。也可以透過spring.config.location來新增額外的屬性檔案的搜尋路徑

         1.2 Spring Boot的屬性設定檔的第二個形式(建議)

                    使用yml方式配置,並在resources目錄下建立application.yml檔案。代碼如下。

server:  port: 8082  context-path: /joyou

                效果与1.1相同。

                  补充:                   

                相对于属性文件来说,YAML 是一个更好的配置文件格式。当有前缀的情况下,使用.yml格式的配置文件更简单。

注意:使用.yml时,属性名的值和冒号中间必须有空格,如name: SpringBoot正确,SpringBoot就是错的。

YAML 在 Ruby on Rails 中得到了很好的應用。 YAML是JSON的一個超集,也是一種方便的定義層次配置資料的格式。它的基本語法規則如下:

  • 大小寫敏感

  • 使用縮排表示層級關係

  • ##只允許使用空白。

  • 縮排的空格數目不重要,只要相同層級的元素左側對齊即可

########################################### ##### 表示註釋,從這個字元一直到行尾,都會被解析器忽略。 ##############################

         1.3 application.properties裡面到底有哪些key是可設定的?

        在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的約定,通常不需要我們單獨指定太多配置。

            1.4 關於配置的優先順序

            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)

#

停用解析命令列參數。

#2、Spring Boot自訂屬性

#

                2.1、 第一个自定义属性的例子  

                          在实际开发过程中,需要程序去配置文件中读取数据(如: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;
	}
}

                使用浏览器访问效果如下

Spring Boot框架的知識點詳解

                2.2 在自訂屬性中呼叫其他屬性

#    2.2 在自訂屬性中呼叫其他屬性

#    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;
	}
}

            效果如图所示:

Spring Boot框架的知識點詳解

            2.3 对于多个属性如何一次调用

                    看了上面的例子后,会产生一个疑问,如果想一次调用10个、20个、50个属性值,难道我要在程序中注入50次值,使用50次注解吗? 为了解决这个疑问,Spring Boot 是这么解决的!

                    首先一个女孩,有身高、体重、罩杯等等属性,我们可以这样来写!

Girl: 
   High: 160CM   Weight: 80KG   CupSize: 30A

                    然后写一个类,这个类中提供Girl的属性,及Setter,Geter方法,需要使用两个注解:

  •                     @Component //如果没有这个注解,会报找不到Bean的错

  •                     @ConfigurationProperties(prefix="Girl") //找到以Girl开头的属性

Spring Boot框架的知識點詳解 

                    然后在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();
	}
}

                启动程序,刷新浏览器,效果如下:

Spring Boot框架的知識點詳解

3、多環境的屬性配置

#            3.1 生產與發展的不同情境

#############################################################3.1 ######                  將既然都這麼說了,那當然是不用的了。我們可以在開發時候就寫好兩套環境中對於屬性值不同需求的yml文件,然後在調用需要的yml文件就好了。 ###

                對生產環境Girl的屬性值如下:

Spring Boot框架的知識點詳解

#        #                我只需要在application.yml中調用不同的文件就好了,dev這個值是我開發和生產環境不同yml文件的後綴名(

注意看上面兩個圖文件的命名

Spring Boot框架的知識點詳解

Spring Boot框架的知識點詳解

    瀏覽器對應的結果

Spring Boot框架的知識點詳解

            第二種環境對應的配置

Spring Boot框架的知識點詳解

        瀏覽器對應的結果

Spring Boot框架的知識點詳解

#補一張到目前為止的專案目錄結構,幫助理解

Spring Boot框架的知識點詳解

以上是Spring Boot框架的知識點詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn