開啟Spring Boot 之旅
開啟Spring Boot 之旅
1、Spring Boot 簡介
簡化Spring應用開發的一個框架;
整個Spring技術棧的一個大整合;
JavaEE開發的一站式解決方案。
2、微服務
2014;雖然他不是微服務提出者,但是他的這篇文章卻明確定義說明了什麼是微服務。
微服務:架構風格
一個應用應該是一組小型服務;可以透過HTTP的的方式進行溝通。
-
單體應用(非微服務)
ALL IN ONE
所有的東西都寫在一個應用裡面。開發一個 OA CRM ERP 等系統,一個應用打包成war包放在tomcat等伺服器上直接執行。開發測試簡單,部署也簡單。擴充套件也簡單。負載不行的話,複製十幾份相同的應用放在十幾個伺服器上,透過負載均衡機制來提高我們的併發能力。
問題就是:牽一髮而動全身 ;專案越大問題越多。
-
微服務
微服務.PNG
)
利用.快速構建一個Spring Boot 專案。 或者使用Spring官方的整合開發環境 STS 、以及IntelliJ IDEA 等工具進行快速構建Spring Boot專案。
-
透過Spring Initiallizr 會自動為我們生成如下的目錄結構:
|-demo
|-src
|-main
|-java
|-com.example.demo
|-DemoApplication.java //啟動類
|-resources
|-static //放置靜態資源
|-templates //前端模板
|-application.properties //配置檔案
|-test
|-java
|-com.example.demo
|-DemoApplicationTests.java //測試啟動類
|-target //程式打包後會在這裡
4 、Spring Boot 啟動類
package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @SpringBootApplication 來、標註一個主程式類,來說明這是一個Spring Boot 應用 */@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { //Spring應用啟動起來 SpringApplication.run(DemoApplication.class, args); } }
@SpringBootApplication:Spring Boot應用標註在這個類上說明這個類是Spring Boot的主配置類,
Spring Boot就應該執行這個類的main方法來啟動Spring Boot應用,這個註解點開如下:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {
@SpringBootConfiguration: Spring Boot 的配置類;
標註在摸個類上表示這是一個 Spring Boot 的配置類,他點開下面有個@Configuration註解
@Configuration: 配置類上來標註這個註解;
配置類----對應-----配置檔案;<u>配置類也是容器中的一個元件 @Component</u>
@EnableAutoConfiguration:開啟自動配置功能
以前我們需要自己配置東西,而Spring Boot 幫我們自動配置;@EnableAutoConfiguration 新增在配置類上,自動配置才能生效。他點開,你面是一個@AutoConfigurationPackage與@Import的組合註解:
@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自動配置包的註解
@Import(AutoConfigurationPackages.Registrar.class) public @interface AutoConfigurationPackage {
Spring的底層註解@Import,給容器中匯入一個元件;匯入的元件由AutoConfigurationPackages.==Registrar==.class 來指定。來看該類下的這個方法:
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { register(registry, new PackageImport(metadata).getPackageName()); }
我們debug一下:
debug.PNG
從結果來看,@AutoConfigurationPackage註解就是將主配置類(@SpringBootApplication所標註的類)的所在包及下面所有子包裡面的所有元件掃描到Spring容器。
@Import({org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.class})
給容器匯入元件的作用,匯入什麼樣的元件?
AutoConfigurationImportSelector:匯入哪些元件的選擇器,進入該類我們來看一個方法:
public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!isEnabled(annotationMetadata)) { return NO_IMPORTS; } AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader .loadMetadata(this.beanClassLoader); AnnotationAttributes attributes = getAttributes(annotationMetadata); List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes); configurations = removeDuplicates(configurations); Set<String> exclusions = getExclusions(annotationMetadata, attributes); checkExcludedClasses(configurations, exclusions); configurations.removeAll(exclusions); configurations = filter(configurations, autoConfigurationMetadata); fireAutoConfigurationImportEvents(configurations, exclusions); return StringUtils.toStringArray(configurations); }
debug一下:
AutoConfiguration
如圖,結果加所有需要匯入的元件以全類名的方式返回,這些元件就會被新增到容器中;
會給容器中匯入非常多的自動配置類(xxxAutoConfiguration):給容器中匯入這個場景所需要的所有元件,並配置好這些元件,免去了我們手寫配置注入功能元件等的工作。
List<String> configurations = SpringFactoriesLoader.loadFactoryNames( getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
引數 EnableAutoConfiguration.class,classloader
Spring Boot 在啟動的時候從類路徑下的META-INF/spring.factories中獲取到EnableAutoConfiguration指定的值;將這些值作為自動配置類匯入到容器中,自動配置類就生效了。
而實際上Spring底層的配置一個都不能少,只不過這些自動配置幫我們做了。
JavaEE的整體整合解決方案和自動配置都在:spring-boot-autoconfigure-2.0.4.RELEASE.jar中
截圖
5、POM.xml檔案
1、父專案
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --></parent>他是所用spring-boot-starter的父專案。而他開啟後,他的父專案是:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.4.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath></parent>他來真正的管理Spring Boot應用裡面的所有依賴版本
即,Spring Boot 的版本仲裁中心:
so,我們在Spring Boot 中匯入的依賴,預設是不需要寫版本的,spring-boot-dependencies
中為我們進行了依賴版本的管理。【而沒有在spring-boot-dependencies
中進行依賴版本宣告的自然需要寫版本了】。
2、匯入依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency></dependencies>
spring-boot-starter-web
:
spring-boot-starter: Spring Boot的場景啟動器
spring-boot-starter-web:幫我們匯入web模組正常執行所依賴的元件,當然以來的版本都受父專案仲裁。
Spring Boot將所有的功能場景都抽取出來,做成一個個的starters(啟動器),只需要在專案中引入這些starter,相關場景的所有依賴都會匯入進來。要用什麼功能基因匯入什麼場景的啟動器。詳細參考, 頁面搜尋starter。來檢視各種場景的啟動器,以及他們所匯入的各種依賴。
3、部署相關
<!--將應用打包成一個可執行的jar包--><build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build>
4、其他雜項
<groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><description>Demo project for Spring Boot</description><properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version></properties>
包含包名、專案名、版本、打包型別、名稱、描述、以及編碼、JDK版本的配置資訊。
6、啟動spring boot 專案的三種方式
ide中直接啟動
cmd 進入專案目錄鍵入
mvn spring-boot:run
來啟動專案透過學習我們知道,springboot內建了一個tomcat伺服器,打包生成的jar包直接可以執行,我們透過
mvn install
命令來編譯打包,在target目錄下。進入該目錄直接java -jar demo-0.0.1-SNAPSHOT.jar
來啟動springboot專案。
作者:廚房有隻偷吃的貓
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2325/viewspace-2818532/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring boot學習(一)開啟Spring boot之旅Spring Boot
- Spring Boot開啟的2種方式Spring Boot
- spring-boot啟動Springboot
- Spring Boot啟動流程Spring Boot
- Spring Boot系列(一):Spring Boot快速開始Spring Boot
- 開啟java之旅!Java
- Spring Boot Starters啟動器Spring Boot
- Spring Boot Runner啟動器Spring Boot
- Spring Boot 啟動過程Spring Boot
- Expo 快速開啟之旅
- Spring Boot啟動流程簡述Spring Boot
- Maven專案Spring Boot啟動MavenSpring Boot
- 驚呆了!Spring Boot 還能開啟遠端除錯?Spring Boot除錯
- [maven][spring boot] mvn spring-boot:run啟動時,指定pom檔案MavenSpring Boot
- Spring Boot 2.0(三):Spring Boot 開源軟體都有哪些?Spring Boot
- Just Do It – 開啟canvas之旅Canvas
- Just Do It - 開啟canvas之旅Canvas
- Centos 7 redis、tomcat、Spring Boot新增開機自啟服務CentOSRedisTomcatSpring Boot
- Spring Boot(三):Spring Boot中的事件的使用 與Spring Boot啟動流程(Event 事件 和 Listeners監聽器)Spring Boot事件
- Spring Boot定製啟動圖案Spring Boot
- Spring Boot:Spring Boot配置MybatisSpring BootMyBatis
- Spring Boot:Spring Boot配置SwaggerSpring BootSwagger
- Spring Boot 的 Web 開發Spring BootWeb
- 正式開啟全站HTTPS加密之旅HTTP加密
- spring boot學習(4): 命令列啟動Spring Boot命令列
- Spring Boot原始碼分析-啟動過程Spring Boot原始碼
- Spring Boot 應用程式啟動流程分析Spring Boot
- Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 開源軟體雲收藏Spring BootDocker
- 從零開始學 Spring BootSpring Boot
- 開發一個Spring Boot Starter!Spring Boot
- Spring Boot 2.0(七):Spring Boot 如何解決專案啟動時初始化資源Spring Boot
- spring、spring MVC、spring BootMVCSpring Boot
- Spring Boot系列十九 Spring boot整合 swaggerSpring BootSwagger
- Spring Boot 參考指南(Spring Boot文件)Spring Boot
- Spring Boot 2.0(八):Spring Boot 整合 MemcachedSpring Boot
- 一條命令開啟監控之旅!
- 在Spring Boot中建立自己的啟動器Spring Boot
- 使用lazyInit縮短Spring Boot啟動時間Spring Boot