目錄css
簡化Spring應用開發的一個框架java
整個Spring技術棧的整合web
J2EE開發的一站式解決方案spring
Martin Fowler數組
微服務是一種架構風格瀏覽器
一個應用應該是一組小型服務:能夠經過HTTP的方式進行互通springboot
每個功能元素最終都是一個可獨立替換和獨立升級的軟件單元服務器
詳細參照微服務文檔架構
Maven設置app
給maven的setting.xml配置文件的profiles標籤添加jdk相關profile
一個功能:瀏覽器發送hello請求,服務器接受請求並處理,響應Hello World字符串;
一、建立一個,maven工程;
二、導入依賴spring boot相關依賴
三、編寫一個主程序:啓動Spring Boot應用
四、編寫相關的Controller、Service
五、運行主程序測試
六、簡化部署
加入插件spring.boot.maven.plugin,將應用打成jar包,直接使用java -jar的命令進行執行;
父項目
spring.boot.starter.parent
其父項目
spring.boot.dependencies 管理SpringBoot中的全部依賴
spring-boot-starter-web
spring-boot-starter:spring-boot場景啓動器:導入web模塊正常運行所依賴的組件
須要什麼功能就導入相應的場景啓動器
@SpringBootApplication
標註在某個類上,表示是一個SpringBoot的主配置類,SpringBoot運行這個類的main方法來啓動SpringBoot應用;
@SpringBootConfiguration :SpringBoot的配置類
標註在某個類上,表示是一個SpringBoot的主配置類
@Configuration:配置類上標註這個註解
配置類=配置文件,配置類也是容器中的一個組件@Component
@EnableAutoConfiguration :開啓自動配置功能
@AutoConfigurationPackage:自動配置包
@Import(AutoConfigurationPackages.Registrar.class):將著配置類所在包及下面全部子包裏面的全部組件掃描到Spring容器;
@Import(EnableAutoConfigurationImportSelector.class):將全部須要導入的組件以全類名的方式返回,這些組件就會被添加到容器當中;會給容器導入大量自動配置類(xxxAutoConfiguration),從而自動配置場景所需組件。
SpringBoot在啓動時從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值做爲自動配置類導入到容器中,自動配置類就生效,從而進行自動配置工做。
J2EE的總體整合解決方案和自動配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
使用IDE的Spring項目建立享導快速建立SpringBoot項目,選擇所需模塊,嚮導聯網建立Spring Boot項目。
SpringBoot使用全局配置文件,配置文件名固定
能夠修改SpringBoot自動配置的默認值
yml以數據爲中心
server: port:8001
xml
<server> <port>8001</port> </server>
基本語法
k:(空格)v :表示一個鍵值對
以空格的縮進來控制層級關係,只要是左對齊的一列數據,都是同一層級
屬性和值大小寫敏感
值的寫法
字面量:普通的值 (數字,字符串,布爾)
鍵值對直接寫
字符串默認不加引號,單引號不會轉義,雙引號會轉義
對象、Map:
person: lastName: zhangsan age: 20 person:{lastName: zhangsan,age: 18}
數組:
用- 值表示數組的一個元素
pets: - cat - dog - pig pets: [cat,dog,pig]
在yml配置文件中進行配置,在javaBean中進行綁定(將配置的值映射到Bean)
@ConfigurationProperties:告訴SpingBoot將本類中的全部屬性和配置文件中相關的配置進行綁定
prefix=」person「,配置文件的person項的全部屬性進行映射
@Component 配置映射只對容器的組件有效
@Component @ConfigurationProperties(prefix="person")
@PropertySource(value={"classpath:person.properties"})
@ImportResource(location={"calsspath:bean.xml"})
SpringBoot推薦使用全註解的方式給容器添加組件
@Configuration //配置類 publie class MyAppConfig{ //將方法的返回值添加到容器中,組件默認id爲方法名 @Bean public HelloService helloService(){ // return new HelloService(); } }
${random.long}、${random.int(10)}、${random.value}、${random.int[1024,65536]}
多Profile文件
主配置文件名能夠是application.(profile).properties/yml
Spring默認使用application.properties的配置
yml支持多文檔塊方式
server: port:8001 spring: profiles: active:dev --- server: port:8002 spring: profiles:dev --- server: port:8003 spring: profiles:prod #指定配置環境
激活指定profile
在配置文件中指定spring.profile.active=(profile)
命令行:
java -jar spring-boot-SNAPSHOT.jar --spring.profiles.active=dev;
運行時傳入參數
虛擬機參數
-Dspring.profiles.active=dev
SpringBoot啓動會掃描如下位置的application.properties/yml文件做爲默認配置文件
file:/config/
file:/
classpath:/config/
classpath:/
優先級由高到低,配置互補,相同配置項高優先級會覆蓋低優先級
也可經過部署運行時在命令中傳參數改變默認配置spring.config.location
優先級由高到低,配置互補,相同配置項高優先級會覆蓋低優先級
命令行參數
-- 配置項=值
java系統屬性
操做系統環境變量
jar包外帶profile的配置文件(application.{profile}.properties或application.yml(有spring.profile))
jar包內帶profile的配置文件(application.{profile}.properties或application.yml(有spring.profile))
jar包外的配置文件(application.properties或application.yml(沒有spring.profile))
jar包內的配置文件(application.properties或application.yml(沒有spring.profile))
外部:打成的jar同一文件夾下
內部:項目文件下
@Configuration註解類上的@PropertySource
SpringBoot啓動時加載主配置類,開啓自動配置功能@EnableAutoConfiguration
@EnableAutoConfiguration做用
利用EnableAutoConfigurationImportSelector給容器中導入一些組件 :能夠查看select Imports()方法的內容
List
configurations=getCandidateConfigurations(annotationMetadata,attributes);獲取候選配置
SpringFactoriesLoader.loadFactoryNames(); 掃描全部jar包類路徑下META-INF/spring.factories 把掃描到的這些文件的內容包裝成properties對象 從properties中獲取到EnableAutoConfiguration.class類名對應的值,而後把他們添加到容器中
將類路徑下META-INF/spring.factories裏面配置的全部EnableAutoConfiguration的值加入到了容器中;
每個自動配置類進行自動配置功能
全部 在配置類中能配置的屬性都是在xxxProperties類中封裝着;
精髓:
細節
@Conditional派生註解:註解指定的條件成立,纔給容器添加組件,配置裏的內容才生效
@Conditional派生註解 | 做用 |
---|---|
@ConditionalOnJava | java版本是否符合要求 |
@ConditionalOnBean | 存在指定Bean |
@ConditionalOnMissingBean | 不存在指定Bean |
@ConditionalOnExpression | 知足SpEL表達式指定 |
@ConditionalOnClass | 有指定類 |
@ConditionalOnMissingClass | 沒有指定類 |
@ConditionalOnSingleCandidate | 只有一個指定Bean |
@ConditionalOnProperty | 指定屬性是否有指定值 |
@ConditionalOnResource | 類路徑下是否存在資源文件 |
@ConditionalOnWebApplication | 當前是Web環境 |
@ConditionalOnNotWebApplication | 當前不是Web環境 |
自動配置類必須在必定條件下才能生效
經過在配置文件中啓用debug=true屬性,讓控制檯自動打印配置報告,能夠很方便知道哪些自動配置類生效