一、Spring Boot 核心概述
Spring Boot 是簡化 Spring 應用開發的框架,作為 Spring 技術棧的整合方案和 J2EE 開發的一站式解決方案,其核心優勢體現在:
- 快速創建獨立運行的 Spring 項目,輕松集成主流框架
- 內置 Servlet 容器(如 Tomcat),無需打包為 war 包即可部署
- 提供 starters 機制,實現自動依賴管理與版本控制,減少版本沖突問題
- 大量自動裝配功能簡化開發流程,同時支持自定義默認配置
- 零 XML 配置、無代碼生成,真正實現開箱即用
- 內置準生產環境的運行時監控功能,便于項目運維
- 與云計算天然適配,滿足現代部署需求
二、微服務架構詳解
1. 微服務的定義與演進
2014 年,Martin Fowler 提出微服務架構理念(參考文檔:Microservices Guide)。從技術演進路徑看,架構風格經歷了:Servlet → SSH → SSM → 單體應用 → SOA → Spring Cloud 的發展過程。
微服務的核心定義為:一種將應用拆分為多個小型、獨立業務服務的架構風格。每個服務具備獨立處理邏輯和輕量通訊機制,可部署在單個或多個服務器上,是松耦合、具有有界上下文的面向服務架構。
- 單體應用:所有功能模塊集中在一個應用中(ALL IN ONE)
- 微服務:每個功能元素都是可獨立替換和升級的軟件單元,通過 HTTP 等協議實現服務間通信
2. 微服務的優缺點
優勢 | 缺點 |
---|---|
聚焦單一業務功能,服務體積小巧 | 分布式系統操作復雜,運維成本高 |
支持 2-5 人小團隊獨立開發 | 可能存在重復開發工作 |
松耦合設計,開發與部署獨立 | 問題跟蹤困難,排查成本高 |
支持多語言開發 | 服務數量增加后,管理復雜度指數上升 |
易于集成自動化部署和持續集成 | - |
便于理解、修改和維護 | - |
可按需擴展,資源利用更高效 | - |
支持中低端服務器部署 | - |
易于與第三方系統集成 | - |
數據存儲靈活(獨立數據庫或統一數據庫) | - |
三、Spring Boot 開發環境準備
1. 環境約束
- JDK:1.8 及以上(推薦 1.8.0_112 版本)
- Maven:3.x 版本(推薦 3.3 以上)
- 開發工具:IntelliJ IDEA 2017+ 或 STS
- Spring Boot 版本:本文以 2.0.2.RELEASE 為例(基于 Spring 5)
2. Maven 配置
在 Maven 的?settings.xml
?配置文件的?profiles
?標簽中添加:
<profile><id>jdk‐1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>
3?idea??設置
?
四、Spring Boot 入門實戰(Hello World)
1. 實現步驟
- 創建 Maven 工程(選擇 jar 類型)
- 導入依賴:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version>
</parent>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
- 編寫主程序類:
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {SpringApplication.run(HelloWorldMainApplication.class, args);}
}
- 編寫 Controller:
@Controller
public class HelloController {@ResponseBody@RequestMapping("/hello")public String hello() {return "Hello World!";}
}
- 運行測試:執行主程序的 main 方法,訪問?
http://localhost:8080/hello
- 簡化部署:添加打包插件后,使用?
mvn package
?打包,通過?java -jar
?命令運行
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
2. 核心原理探究
(1)POM 文件分析
- 父項目:
spring-boot-starter-parent
?的父項目是?spring-boot-dependencies
,它是版本仲裁中心,管理所有依賴版本,因此導入依賴時通常無需指定版本。 - 啟動器(Starter):
spring-boot-starter-web
?是 Web 場景啟動器,自動導入 Web 開發所需的組件(如 Spring MVC、Tomcat 等)。Spring Boot 將不同功能場景封裝為 starters,開發者只需導入對應 starter 即可快速集成功能。
(2)主程序類注解分析
@SpringBootApplication
?是核心注解,由以下注解組成:
/**
* @SpringBootApplication 來標注一個主程序類,說明這是一個Spring Boot應用
*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// Spring應用啟動起來SpringApplication.run(HelloWorldMainApplication.class,args);}
}
@SpringBootConfiguration:標識為 Spring Boot 配置類,內部包含?@Configuration
?注解,說明配置類也是容器組件(@Component
)。
@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 {
@EnableAutoConfiguration:開啟自動配置,包含:
@AutoConfigurationPackage:通過?@Import
?導入?AutoConfigurationPackages.Registrar
,將主配置類所在包及子包下的組件掃描到 Spring 容器。以前我們需要配置的東西,Spring Boot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能;這樣自動配置才能生效;
@AutoConfigurationPackage:自動配置包
@Import(EnableAutoConfigurationImportSelector.class):從?META-INF/spring.factories
?中加載自動配置類(xxxAutoConfiguration
),自動配置場景所需組件,替代手動配置。Spring的底層注解@Import,給容器中導入一個組件;導入的組件由AutoConfigurationPackages.Registrar.class;將主配置類(@SpringBootApplication標注的類)的所在包及下面所有子包里面的所有組件掃描到Spring容器;
@Import(EnableAutoConfigurationImportSelector.class);
給容器中導入組件?EnableAutoConfigurationImportSelector:導入哪些組件的選擇器;
將所有需要導入的組件以全類名的方式返回;這些組件就會被添加到容器中;會給容器中導入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導入這個場景需要的所有組件,
并配置好這些組件;
有了自動配置類,免去了我們手動編寫配置注入功能組件等的工作;SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導入到容器中,自動配置類就生效,幫我們進行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們;