幹貨分享微服務spring-cloud(1.初探)
讀者:對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.properties和YAML配置內容
10) 位於當前應用jar包之內的application.properties和YAML配置內容
11) @Configuration註解修改的類中,通過@PropertySource註解定義的屬性
12) 應用默認屬性,使用SpringApplication.setDefaultProperties定義的內容
例如Spring Cloud Config從git等外部獲取配置來取代jar包內本地配置文件,這樣即使同樣名稱的本地調試配置文件對其他demo、staging、prod也沒有任何影響,因為7優先級高於8或者說9優先級高於10
1.6. actuator與原生端點
spring-boot-starter-actuator模塊的實現對於實施微服務可以有效省去或減少監控系統在采集應用指標時的開發量。它提供了一些原始端點。
幹貨分享微服務spring-cloud(1.初探)