1. 程式人生 > >幹貨分享微服務spring-cloud(1.初探)

幹貨分享微服務spring-cloud(1.初探)

前言 文件 配置文件 numeric .profile eas dfa 關系 tle

前言

讀者:對spring、spring boot有一定了解

難度:初中級,旨在快速應用於項目

參考文獻:網絡、書籍、官方文檔,有任何錯誤歡迎大家留言拍磚指正

實戰模擬源碼:https://github.com/yhqnh/demo-springcloud,使用spring-cloud dalston版本

1. Spring boot

1.1. 依賴關系

spring cloud 強依賴spring boot

spring boot強依賴spring

弱弱說一句強依賴就是沒有它不行,所以有必要對spring或spring boot一些特性作簡單介紹

1.2. 元註解和組合註解

元註解:可以註解到別的註解上的註解,被註解的註解稱之為組合註解。

例如@SpringBootApplication就是組合註解,它組和了@SpringBootConfiguration

@EnableAutoConfiguration等。

技術分享圖片

1.3. 自動配置

spring boot會根據在類路徑中的jar包和類,為jar包裏的類自動配置bean,這樣會極大地減少我們要使用的配置。spring boot通過spring4.X提供的條件註解condition來實現。spring4.x提倡使用java配置和註解配置組合,不需要任何xml配置即可實現spring所有配置。也可使用@ImportResource({“application1.xml”,“application2.xml”})對 xml配置的支持。

關閉特定的自動配置使用@SpringBootConfiguration的exclude屬性,例如exclude = {DataSourceAutoConfiguration.class}來關閉數據源自動配置

技術分享圖片

@condition根據滿足某一特定條件創建一個特定的bean,比方說當類路徑存在某一jar包時候,自動配置一個或多個bean。

@ConditionalOnBean:當容器裏有指定的bean的條件下

@ConditionalOnClass:當類路徑下有指定的類的條件下

@ConditionalOnMissingBean:當容器裏沒有指定bean的情況下

@ConditionalOnResource:

類路徑是否有指定的值

例如RabbitAutoConfiguration當發現類路徑下沒有ConnectionFactory類型的bean時創建一個

技術分享圖片

我們來看看EnableAutoConfiguration註解的源碼

技術分享圖片

這裏最關鍵的@import功能導入配置,EnableAutoConfigurationImportSelector使用SpringFactoriesLoader.loadFactories方法來掃描具有META-INF/spring.factories文件的jar包,而spring-boot-autoconfiguration的jar包裏有spring.fatories文件,此文件包含了所有自動配置。

技術分享圖片

技術分享圖片

1.4. 多環境配置

在spring boot中,多環境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識。{profile}通過spring.profiles.active=test屬性來設置則會加載application-test.properties配置文件。

1.5. 加載順序

Spring boot加載屬性順序,數值越小優先級越高

1) 在命令行中的參數

2) SPRING_APPLICATION_JSON中的屬性。SPRING_APPLICATION_JSON是以json格式配置在系統環境變量中

3) java:comp/env中的JNDI屬性

4) Java的系統屬性,可以通過System.getProperties()獲得的內容

5) 操作系統的環境變量

6) 通過random.*配置的隨機屬性

7) 位於當前應用jar包之外,針對不同{profile}環境的配置文件內容,例如application-{profile}.properties或是YAML定義的配置文件

8) 位於當前應用jar包之內,針對不同{profile}環境的配置文件內容,例如application-{profile}.properties或是YAML定義的配置文件

9) 位於當前應用jar包之外的application.propertiesYAML配置內容

10) 位於當前應用jar包之內的application.propertiesYAML配置內容

11) @Configuration註解修改的類中,通過@PropertySource註解定義的屬性

12) 應用默認屬性,使用SpringApplication.setDefaultProperties定義的內容

例如Spring Cloud Configgit等外部獲取配置來取代jar包內本地配置文件,這樣即使同樣名稱的本地調試配置文件對其他demostagingprod也沒有任何影響,因為7優先級高於8或者說9優先級高於10

1.6. actuator與原生端點

spring-boot-starter-actuator模塊的實現對於實施微服務可以有效省去或減少監控系統在采集應用指標時的開發量。它提供了一些原始端點。

技術分享圖片

幹貨分享微服務spring-cloud(1.初探)