Spring Boot 與微服務(wù)入門實(shí)戰(zhàn)詳細(xì)總結(jié)
一、Spring Boot 核心概述
Spring Boot 是簡化 Spring 應(yīng)用開發(fā)的框架,作為 Spring 技術(shù)棧的整合方案和 J2EE 開發(fā)的一站式解決方案,其核心優(yōu)勢體現(xiàn)在:
- 快速創(chuàng)建獨(dú)立運(yùn)行的 Spring 項(xiàng)目,輕松集成主流框架
- 內(nèi)置 Servlet 容器(如 Tomcat),無需打包為 war 包即可部署
- 提供 starters 機(jī)制,實(shí)現(xiàn)自動依賴管理與版本控制,減少版本沖突問題
- 大量自動裝配功能簡化開發(fā)流程,同時支持自定義默認(rèn)配置
- 零 XML 配置、無代碼生成,真正實(shí)現(xiàn)開箱即用
- 內(nèi)置準(zhǔn)生產(chǎn)環(huán)境的運(yùn)行時監(jiān)控功能,便于項(xiàng)目運(yùn)維
- 與云計(jì)算天然適配,滿足現(xiàn)代部署需求
二、微服務(wù)架構(gòu)詳解
1. 微服務(wù)的定義與演進(jìn)
2014 年,Martin Fowler 提出微服務(wù)架構(gòu)理念(參考文檔:Microservices Guide)。從技術(shù)演進(jìn)路徑看,架構(gòu)風(fēng)格經(jīng)歷了:Servlet → SSH → SSM → 單體應(yīng)用 → SOA → Spring Cloud 的發(fā)展過程。
微服務(wù)的核心定義為:一種將應(yīng)用拆分為多個小型、獨(dú)立業(yè)務(wù)服務(wù)的架構(gòu)風(fēng)格。每個服務(wù)具備獨(dú)立處理邏輯和輕量通訊機(jī)制,可部署在單個或多個服務(wù)器上,是松耦合、具有有界上下文的面向服務(wù)架構(gòu)。
- 單體應(yīng)用:所有功能模塊集中在一個應(yīng)用中(ALL IN ONE)
- 微服務(wù):每個功能元素都是可獨(dú)立替換和升級的軟件單元,通過 HTTP 等協(xié)議實(shí)現(xiàn)服務(wù)間通信
2. 微服務(wù)的優(yōu)缺點(diǎn)
| 優(yōu)勢 | 缺點(diǎn) |
|---|---|
| 聚焦單一業(yè)務(wù)功能,服務(wù)體積小巧 | 分布式系統(tǒng)操作復(fù)雜,運(yùn)維成本高 |
| 支持 2-5 人小團(tuán)隊(duì)獨(dú)立開發(fā) | 可能存在重復(fù)開發(fā)工作 |
| 松耦合設(shè)計(jì),開發(fā)與部署獨(dú)立 | 問題跟蹤困難,排查成本高 |
| 支持多語言開發(fā) | 服務(wù)數(shù)量增加后,管理復(fù)雜度指數(shù)上升 |
| 易于集成自動化部署和持續(xù)集成 | - |
| 便于理解、修改和維護(hù) | - |
| 可按需擴(kuò)展,資源利用更高效 | - |
| 支持中低端服務(wù)器部署 | - |
| 易于與第三方系統(tǒng)集成 | - |
| 數(shù)據(jù)存儲靈活(獨(dú)立數(shù)據(jù)庫或統(tǒng)一數(shù)據(jù)庫) | - |
三、Spring Boot 開發(fā)環(huán)境準(zhǔn)備
1. 環(huán)境約束
- JDK:1.8 及以上(推薦 1.8.0_112 版本)
- Maven:3.x 版本(推薦 3.3 以上)
- 開發(fā)工具:IntelliJ IDEA 2017+ 或 STS
- Spring Boot 版本:本文以 2.0.2.RELEASE 為例(基于 Spring 5)
2. Maven 配置
在 Maven 的 settings.xml 配置文件的 profiles 標(biāo)簽中添加:
<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設(shè)置


四、Spring Boot 入門實(shí)戰(zhàn)(Hello World)
1. 實(shí)現(xiàn)步驟
- 創(chuàng)建 Maven 工程(選擇 jar 類型)
- 導(dǎo)入依賴:
<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!";
}
}
- 運(yùn)行測試:執(zhí)行主程序的 main 方法,訪問
http://localhost:8080/hello - 簡化部署:添加打包插件后,使用
mvn package打包,通過java -jar命令運(yùn)行
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2. 核心原理探究
(1)POM 文件分析
- 父項(xiàng)目:
spring-boot-starter-parent的父項(xiàng)目是spring-boot-dependencies,它是版本仲裁中心,管理所有依賴版本,因此導(dǎo)入依賴時通常無需指定版本。 - 啟動器(Starter):
spring-boot-starter-web是 Web 場景啟動器,自動導(dǎo)入 Web 開發(fā)所需的組件(如 Spring MVC、Tomcat 等)。Spring Boot 將不同功能場景封裝為 starters,開發(fā)者只需導(dǎo)入對應(yīng) starter 即可快速集成功能。
(2)主程序類注解分析
@SpringBootApplication 是核心注解,由以下注解組成:
/**
* @SpringBootApplication 來標(biāo)注一個主程序類,說明這是一個Spring Boot應(yīng)用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring應(yīng)用啟動起來
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
@SpringBootConfiguration:標(biāo)識為 Spring Boot 配置類,內(nèi)部包含 @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 導(dǎo)入 AutoConfigurationPackages.Registrar,將主配置類所在包及子包下的組件掃描到 Spring 容器。以前我們需要配置的東西,Spring Boot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能;這樣自動配置才能生效;
@AutoConfigurationPackage:自動配置包
@Import(EnableAutoConfigurationImportSelector.class):從 META-INF/spring.factories 中加載自動配置類(xxxAutoConfiguration),自動配置場景所需組件,替代手動配置。Spring的底層注解@Import,給容器中導(dǎo)入一個組件;導(dǎo)入的組件由AutoConfigurationPackages.Registrar.class;將主配置類(@SpringBootApplication標(biāo)注的類)的所在包及下面所有子包里面的所有組件掃描到Spring容器;
@Import(EnableAutoConfigurationImportSelector.class);
給容器中導(dǎo)入組件?EnableAutoConfigurationImportSelector:導(dǎo)入哪些組件的選擇器;
將所有需要導(dǎo)入的組件以全類名的方式返回;這些組件就會被添加到容器中;會給容器中導(dǎo)入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導(dǎo)入這個場景需要的所有組件,
并配置好這些組件;

有了自動配置類,免去了我們手動編寫配置注入功能組件等的工作;SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導(dǎo)入到容器中,自動配置類就生效,幫我們進(jìn)行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們;
到此這篇關(guān)于Spring Boot 與微服務(wù)詳細(xì)總結(jié)的文章就介紹到這了,更多相關(guān)Spring Boot微服務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺談springboot與微服務(wù)架構(gòu)
- 如何在Spring?Boot微服務(wù)使用ValueOperations操作Redis集群String字符串
- 關(guān)于SpringBoot微服務(wù)發(fā)布與部署的三種方式
- SpringBoot微服務(wù)注冊分布式Consul的詳細(xì)過程
- springboot微服務(wù)項(xiàng)目集成html頁面的實(shí)現(xiàn)
- springboot中使用Feign整合nacos,gateway進(jìn)行微服務(wù)之間的調(diào)用方法
- 使用Spring?Boot+gRPC構(gòu)建微服務(wù)并部署的案例詳解
- SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警
- 教你在Spring Boot微服務(wù)中集成gRPC通訊的方法
- SpringBoot+Nacos+Kafka微服務(wù)流編排的簡單實(shí)現(xiàn)
相關(guān)文章
JavaEE開發(fā)基于Eclipse的環(huán)境搭建以及Maven Web App的創(chuàng)建
本文主要介紹了如何在Eclipse中創(chuàng)建的Maven Project,本文是JavaEE開發(fā)的開篇,也是基礎(chǔ)。下面內(nèi)容主要包括了JDK1.8的安裝、JavaEE版本的Eclipse的安裝、Maven的安裝、Tomcat 9.0的配置、Eclipse上的M2Eclipse插件以及STS插件的安裝。2017-03-03
Java中try-catch的使用及注意細(xì)節(jié)
現(xiàn)在有很多的語言都支持try-catch,比如常見的就是c++,java等,這篇文章主要給大家介紹了關(guān)于Java中try-catch的使用及注意細(xì)節(jié)的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
圖解Springboot集成七牛云并實(shí)現(xiàn)圖片上傳功能過程
在實(shí)際開發(fā)中 ,基本都會有應(yīng)用到文件上傳的場景,但隨著或多或少的需求問題,之前有在springboot上用過七牛云實(shí)現(xiàn)圖片上傳,今天因?yàn)槟承┰蛴种匦率褂昧讼缕吲T埔虼讼肟偨Y(jié)下七牛云2021-11-11
Java實(shí)現(xiàn)的二叉樹常用操作【前序建樹,前中后遞歸非遞歸遍歷及層序遍歷】
這篇文章主要介紹了Java實(shí)現(xiàn)的二叉樹常用操作,包括二叉樹的前序建樹,前中后遞歸非遞歸遍歷及層序遍歷等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
解決Idea報錯There is not enough memory
在使用Idea開發(fā)過程中,可能會遇到因內(nèi)存不足導(dǎo)致的閃退問題,出現(xiàn)"There is not enough memory to perform the requested operation"錯誤時,可以通過調(diào)整Idea的虛擬機(jī)選項(xiàng)來解決,方法是在Idea的Help菜單中選擇Edit Custom VM Options2024-11-11
關(guān)于dubbo的RPC和RESTful性能及對比
這篇文章主要介紹了關(guān)于dubbo的RPC和RESTful性能及對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
postman中POST請求時參數(shù)包含參數(shù)list設(shè)置方式
這篇文章主要介紹了postman中POST請求時參數(shù)包含參數(shù)list設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05

