Spring Boot 與微服務詳細總結

一、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. 實現步驟

  1. 創建 Maven 工程(選擇 jar 類型)
  2. 導入依賴
<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>
  1. 編寫主程序類
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {SpringApplication.run(HelloWorldMainApplication.class, args);}
}
  1. 編寫 Controller
@Controller
public class HelloController {@ResponseBody@RequestMapping("/hello")public String hello() {return "Hello World!";}
}
  1. 運行測試:執行主程序的 main 方法,訪問?http://localhost:8080/hello
  2. 簡化部署:添加打包插件后,使用?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指定的值,將這些值作為自動配置類導入到容器中,自動配置類就生效,幫我們進行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91786.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

輕松上手:從零開始啟動第一個 Solana 測試節點

嗨&#xff0c;各位技術愛好者們&#xff01; 大家是否對 Solana 的“光速”交易處理能力感到好奇&#xff1f;或者你是一名開發者&#xff0c;正準備在 Solana 上構建下一個殺手級 dApp&#xff1f;無論大家是出于學習目的還是實際開發需求&#xff0c;親手運行一個 Solana 節…

Gerrit workflow

提交代碼 每次提交代碼前&#xff0c;先執行 git pull --rebase &#xff0c;確保已經合并天上代碼&#xff0c;解決沖突 git add git commit -m git push origin HEAD:refs/for/{BRANCH_NAME} 可考慮設置 alias 方式&#xff0c;參考下文 CR-2 情況處理(verify-1情況一樣處理…

量化交易如何查詢CFD指數實時行情

CFD即所謂的差價合約&#xff0c;是投資者在不擁有實際資產的情況下&#xff0c;交易金融市場的一種方式。最近筆者研究這一塊比較多&#xff0c;但查遍整個中文互聯網卻很少找到關于CFD實時行情的查詢教程。因此有了這篇文章。以下我將通過一個簡單的Python代碼示例&#xff0…

sql練習二

首先&#xff0c;建表。創建學生表和score表接著導入創建好基礎信息就可以開始做了。3、分別查詢student表和score表的所有記錄4、查詢student表的第2條到第5條記錄5、從student表中查詢計算機系和英語系的學生的信息6、從student表中查詢年齡小于22歲的學生信息7、從student表…

windows11下基于docker單機部署ceph集群

windows下基于docker單機部署ceph集群 創建ceph專用網絡 docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network查看是否創建成功&#xff08;查看創建狀態&#xff09; docker network inspect ceph-network拉取鏡像&#xff1a;(鏡像源自行選擇) docke…

使用DataGrip連接安裝在Linux上的Redis

目錄 一、前言 二、開放防火墻端口 三、使用DataGrip連接安裝在Linux上的Redis 一、前言 在學習黑馬Redis從入門到實戰的視頻&#xff0c;完成了Redis在linux上的安裝配置之后&#xff0c;我們可以使用圖形化界面方便操作使用redis數據庫。在24年JavaWebAI學習時連接MySQL數…

MySQL的union、union all導致排序失效

今天練習SQL&#xff0c;使用union all 連接各個查詢導致我的各個查詢排序失效&#xff0c;最后發現使用union all后會忽略各個模塊的order by&#xff0c;只有最外層的order by才會生效原SQL如下&#xff1a;( selectexam_id tid,count(distinct uid) uv, count(uid) pv frome…

LVS 集群技術實踐:NAT 與 DR 模式的配置與對比

1 實驗環境規劃 實驗目標是搭建一個負載均衡集群&#xff0c;通過 LVS 調度器將流量分發到兩臺真實服務器&#xff08;RS1 和 RS2&#xff09;。2.網絡配置3 實驗步驟關閉防火墻和 SELinux安裝 HTTP 服務&#xff08;在 RS21和 RS2 上&#xff09;&#xff1a;sudo systemctl s…

YOLOv8中添加SENet注意力機制

注意力機制(Attention Mechanism)是深度學習中的一種方法,在圖像處理領域,尤其是在卷積神經網絡(CNN)和視覺Transformer等架構中。圖像數據具有局部相關性,注意力機制可以幫助模型聚焦于圖像中更重要的區域,從而提升處理效果。 SENet(Squeeze-and-Excitation Network)…

SpringBoot五分鐘快速入門指南

使用 Spring Boot 構建應用 本指南提供了關于Spring Boot如何幫助您加速應用開發的一些示例。隨著您閱讀更多 Spring 入門指南,您將看到 Spring Boot 的更多用例。本指南旨在讓您快速了解 Spring Boot。如果您想創建自己的基于 Spring Boot 的項目,請訪問 Spring Initializr…

docker,防火墻關閉后,未重啟docker,導致端口映射失敗

首先&#xff0c;看這篇文章前&#xff0c;建議先把網上其他的文章說的方法嘗試一遍&#xff01;&#xff01;&#xff01; 1. 現象 docker啟動某一個容器&#xff0c;然后映射端口時顯示失敗2. 解決 把網上的方法嘗試一遍之后&#xff0c;最后發現是防火墻的問題&#xff01;&…

事務處理與AOP(web后端筆記第四期)

p.s.這是萌新自己自學總結的筆記&#xff0c;如果想學習得更透徹的話還是請去看大佬的講解 目錄事務spring事物管理事物屬性--回滾事物屬性--傳播行為(propagation)AOP一些核心概念通知類型通知的執行順序切入點表達式executionannotation連接點事務 事物是一組操作的集合&…

第36周———— RNN實現阿爾茨海默病診斷

目錄 前言 1.檢查GPU 2.查看數據 3.劃分數據集 4.創建模型與編譯訓練 ????5.編譯及訓練模型 6.結果可視化 7.模型預測 8.總結&#xff1a; 前言 &#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 1.檢查G…

equals和hashcode方法重寫

在 Java 中&#xff0c;當你需要基于對象的內容而非引用地址來判斷兩個對象是否相等時&#xff0c;就需要重寫equals和hashCode方法。以下是具體場景和實現原則&#xff1a;一、為什么需要同時重寫這兩個方法&#xff1f;equals方法&#xff1a;默認比較對象的內存地址&#xf…

Excel批量生成SQL語句 Excel批量生成SQL腳本 Excel拼接sql

Excel批量生成SQL語句 Excel批量生成SQL腳本 Excel拼接sql一、情境描述在Excel中有標準的格式化數據&#xff0c;如何快速導入到數據庫中呢&#xff1f;有些工具支持Excel導入的&#xff0c;則可以快速導入數據---例如Navicat&#xff1b;如果不支持呢&#xff0c;如果將Excel表…

金和OA C6 DelTemp.aspx 存在XML實體注入漏洞(CVE-2025-7523)

免責聲明 本文檔所述漏洞詳情及復現方法僅限用于合法授權的安全研究和學術教育用途。任何個人或組織不得利用本文內容從事未經許可的滲透測試、網絡攻擊或其他違法行為。 前言:我們建立了一個更多,更全的知識庫。每日追蹤最新的安全漏洞,追中25HW情報。 更多詳情: http…

Android性能優化之啟動優化

一、啟動性能瓶頸深度分析 1. 冷啟動階段耗時分布階段耗時占比關鍵阻塞點進程創建15%fork進程 加載ZygoteApplication初始化40%ContentProvider/庫初始化Activity創建30%布局inflate 視圖渲染首幀繪制15%VSync信號等待 GPU渲染2. 高頻性能問題 初始化風暴&#xff1a;多個庫…

中國優秀開源軟件及企業調研報告

中國優秀開源軟件及企業調研報告 引言 當前中國開源生態呈現蓬勃發展態勢&#xff0c;技術創新領域尤為活躍&#xff0c;其中人工智能大模型成為開源動作的核心聚焦方向。2025年上半年&#xff0c;國內AI領域開源生態迎來密集爆發&#xff0c;頭部科技企業相繼推出重要開源舉…

C++語法 匿名對象 與 命名對象 的詳細區分

目錄一、匿名對象的本質定義二、匿名對象的調用邏輯&#xff1a;即生即用的設計三、與命名對象的核心差異四、匿名對象的典型應用場景五、匿名對象的潛在風險與規避六、總結&#xff1a;匿名對象的價值定位在 C 類與對象的知識體系中&#xff0c;匿名對象是一種容易被咱們忽略&…

【Fedora 42】Linux內核升級后,鼠標滾輪失靈,libinput的鍋?

解決&#xff1a; 最近在玩Fedora 42&#xff0c;升級了一次給俺鼠標滾輪干失靈了。原因可能是 libinput 升級后與Fedora升級后的某些配置有沖突&#xff1f;&#xff08;搞不懂&#xff09; sudo dnf downgrade libinput降級 libinput (1.28.901-1.fc42 -> 1.28.0-1.fc42) …