《SpringBoot實戰:從0到1》第1章SpringBoot簡介
第1章 Spring Boot簡介
Java Web開發涉及的技術比較繁雜,涉及到很多開發框架和工具(Java, Scala, Kotlin, Clojure,Groovy, Grails,Gradle, Maven, JDBC,Mysql, oracle, mongodb, Tomcat,Jetty,Spring,Struts,Hibernate,Mybatis,JPA,JSP,velocity,freemarker,thymeleaf ,Redis,… )而且它們各有所長,並不是一個完善的體系。這對程式設計師能進行Jave Web開發,帶來了一定的技術門檻和學習成本。
有沒有一個像“航空母艦(Aircraft Carrier)”式的威力強大的武器,可以整合這一切呢?答案就是:Spring Boot。
2.1 用SpringBoot創造一切吧
SpringBoot讓建立獨立的,生產環境的基於Spring的應用更加快捷簡易。 大部分Spring Boot Application只要一些極簡的配置,即可“一鍵執行”。
SpringBoot的特性如下[1]:
- 建立獨立的Spring applications
- 能夠使用內嵌的Tomcat, Jetty or Undertow,不需要部署war
- 提供定製化的starter poms來簡化maven配置(gradle相同)
- 追求極致的自動配置Spring
- 提供一些生產環境的特性,比如特徵指標,健康檢查和外部配置。
- 零程式碼生成和零XML配置
Spring由於其繁瑣的配置,一度被人認為“配置地獄”,各種XML、Annotation配置,讓人眼花繚亂,而且如果出錯了也很難找出原因。而Spring Boot更多的是採用Java Config的方式,對Spring進行配置。
我們企業級軟體的目標是提供穩定健壯的服務,以實現其商業價值。為了滿足這些需求,服務開發者需要能夠快速構建和迭代新的應用,同時應用的架構是可擴充套件的,行動式的,富彈性的,可以進行頻繁的更新。SpringBoot正式為此而誕生[2]。
2.2 SpringBoot起源
SpringBoot是伴隨著Spring4.0誕生的;
從字面理解,Boot是引導的意思,因此SpringBoot幫助開發者快速搭建Spring框架;SpringBoot幫助開發者快速啟動一個Web容器;SpringBoot繼承了原有Spring框架的優秀基因;SpringBoot使得基於Spring的開發過程更加簡易。
Change is inevitable, that`s the only constant. Become the Future You Imagine (Rob Mee, Pivotal CEO)[3]
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。
多年以來,Spring IO平臺飽受非議的一點就是大量的XML配置以及複雜的依賴管理。在去年的SpringOne 2GX會議上,Pivotal的CTO Adrian Colyer回應了這些批評,並且特別提到該平臺將來的目標之一就是實現免XML配置的開發體驗。Boot所實現的功能超出了這個任務的描述,開發人員不僅不再需要編寫XML,而且在一些場景中甚至不需要編寫繁瑣的import語句。
然而,Spring Boot並不是要成為Spring IO平臺裡面眾多“Foundation”層專案的替代者。Spring Boot的目標不在於為已解決的問題域提供新的解決方案,而是為平臺帶來另一種開發體驗,從而簡化對這些已有技術的使用。對於已經熟悉Spring生態系統的開發人員來說,Boot是一個很理想的選擇,不過對於採用Spring技術的新人來說,Boot提供一種更簡潔的方式來使用這些技術。[4]
2.3 SpringBoot在整個Spring生態中
2.3.1 Spring生態
作為當前主流的企業框架Spring,它提供了一整套相關的頂級專案,能讓開發者快速的上手實現自己的應用。Spring生態如下圖所示:
Spring IO platform:用於系統部署,是可整合的,構建現代化應用的版本平臺,具體來說當你使用maven dependency引入spring jar包時它就在工作了。
Spring Boot:旨在簡化建立產品級的 Spring 應用和服務,簡化了配置檔案,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。
Spring Framework:即通常所說的spring 框架,是一個開源的Java/Java EE全功能棧應用程式框架,其它spring專案如spring boot也依賴於此框架。
Spring Cloud:微服務工具包,為開發者提供了在分散式系統的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排等開發工具包。
Spring XD:是一種執行時環境(伺服器軟體,非開發框架),組合spring技術,如spring batch、spring boot、spring data,採集大資料並處理。
Spring Data:是一個資料訪問及操作的工具包,封裝了很多種資料及資料庫的訪問相關技術,包括:jdbc、Redis、MongoDB、Neo4j等。
Spring Batch:批處理框架,或說是批量任務執行管理器,功能包括任務排程、日誌記錄/跟蹤等。
Spring Security:是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪問控制解決方案的安全框架。
Spring Integration:面向企業應用整合(EAI/ESB)的程式設計框架,支援的通訊方式包括HTTP、FTP、TCP/UDP、JMS、RabbitMQ、Email等。
Spring Social:一組工具包,一組連線社交服務API,如Twitter、Facebook、LinkedIn、GitHub等,有幾十個。
Spring AMQP:訊息佇列操作的工具包,主要是封裝了RabbitMQ的操作。
Spring HATEOAS:是一個用於支援實現超文字驅動的 REST Web 服務的開發庫。
Spring Mobile:是Spring MVC的擴充套件,用來簡化手機上的Web應用開發。
Spring for Android:是Spring框架的一個擴充套件,其主要目的在乎簡化Android本地應用的開發,提供RestTemplate來訪問Rest服務。
Spring Web Flow:目標是成為管理Web應用頁面流程的最佳方案,將頁面跳轉流程單獨管理,並可配置。
Spring LDAP:是一個用於操作LDAP的Java工具包,基於Spring的JdbcTemplate模式,簡化LDAP訪問。
Spring Session:session管理的開發工具包,讓你可以把session儲存到redis等,進行叢集化session管理。
Spring Web Services:是基於Spring的Web服務框架,提供SOAP服務開發,允許通過多種方式建立Web服務。
Spring Shell:提供互動式的Shell可讓你使用簡單的基於Spring的程式設計模型來開發命令,比如Spring Roo命令。
Spring Roo:是一種Spring開發的輔助工具,使用命令列操作來生成自動化專案,操作非常類似於Rails。
Spring Scala:為Scala語言程式設計提供的spring框架的封裝(新的程式語言,Java平臺的Scala於2003年底/2004年初發布)。
Spring BlazeDS Integration:一個開發RIA工具包,可以整合Adobe Flex、BlazeDS、Spring以及Java技術建立RIA。
Spring Loaded:用於實現java程式和web應用的熱部署的開源工具。
Spring REST Shell:可以呼叫Rest服務的命令列工具,敲命令列操作Rest服務。
2.3.2 Spring cloud子專案
目前來說spring主要集中於spring boot(用於開發微服務)和spring cloud相關框架的開發。spring cloud子專案包括:
Spring Cloud Config:配置管理開發工具包,可以讓你把配置放到遠端伺服器,目前支援本地儲存、Git以及Subversion。
Spring Cloud Bus:事件、訊息匯流排,用於在叢集(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。
Spring Cloud Netflix:針對多種Netflix元件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
Netflix Eureka:雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層伺服器的故障轉移。
Netflix Hystrix:容錯管理工具,旨在通過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。
Netflix Zuul:邊緣服務工具,是提供動態路由,監控,彈性,安全等的邊緣服務。
Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態型別化屬性、執行緒安全配置操作、輪詢框架、回撥機制等功能。
Spring Cloud for Cloud Foundry:通過Oauth2協議繫結服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS雲平臺。
Spring Cloud Sleuth:日誌收集工具包,封裝了Dapper,Zipkin和HTrace操作。
Spring Cloud Data Flow:大資料操作工具,通過命令列方式運算元據流。
Spring Cloud Security:安全工具包,為你的應用程式新增安全控制,主要是指OAuth2。
Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫整合。
Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現。
Spring Cloud Stream:資料流操作開發包,封裝了與Redis,Rabbit、Kafka等傳送接收訊息。
Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令列方式快速建立雲元件。
2.4 SpringBoot核心元件
SpringBoot核心模組如下圖所示:
2.5 SpringBoot版本歷史
SpringBoot專案原始碼:https://github.com/spring-projects/spring-boot
SpringBoot學習示例:https://github.com/netgloo/spring-boot-samples
版本歷史:https://github.com/spring-projects/spring-boot/releases
2.6 SpringBoot學習成本
正因為Spring Boot是與Spring一脈相承的,所以對於廣大的Java開發者而言,對於Spring的學習成本幾乎為零。
在實踐Spring Boot時學習重點,或者說思維方式改變的重點在於:
1)對於REST的理解,這一點尤為重要,需要從設計、開發多個角色達成共識,很多時候都是對於HTTP 1.1協議以及REST的精髓不理解,導致REST被「盲用」而產生一些不好的效果。
2)對於YAML的理解和對於JavaConfig的理解,這兩點相對較為簡單,本質上是簡化了xml檔案,並提供等價的配置表述能力。
小結
SpringBoot繼承了原有Spring框架的優秀基因;SpringBoot簡化了使用Spring的過程。
參考資料
1.http://projects.spring.io/spring-boot/
2.https://pivotal.io/spring-app-framework#buildanything
4.http://www.infoq.com/cn/articles/microframeworks1-spring-boot
5.http://blog.csdn.net/zeb_perfect/article/details/51945350
7.SpringBoot官網文件:
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
相關文章
- springboot使用redis(從配置到實戰)Spring BootRedis
- SpringBoot基礎24_SpringBoot簡介1Spring Boot
- node專案從0到1實戰
- 從SpringBoot到SpringMVCSpring BootSpringMVC
- SpringBoot開發案例從0到1構建分散式秒殺系統Spring Boot分散式
- Kafka 簡介 & 整合 SpringBootKafkaSpring Boot
- 從0到1實現PromisePromise
- Flink 從 0 到 1 學習 —— 第一章 Flink 簡介
- 從0到1:React專案中的Webpack配置實戰ReactWeb
- 從 0 到 1 實現一款簡易版 WebpackWeb
- 從0到1實現一個簡單計算器
- 全新SpringBoot框架教程,從入門到實戰一步到位Spring Boot框架
- 實戰SpringBoot AdminSpring Boot
- 從0到1完成nutch分散式爬蟲專案實戰分散式爬蟲
- 從0到1使用Kubernetes系列(六):資料持久化實戰持久化
- 從SpringBoot到SpringCloudAlibaba簡明教程(一):初識SpringBoot及其基礎專案構建Spring BootGCCloud
- PHash從0到1
- JWT+SpringBoot實戰JWTSpring Boot
- SpringBoot整合Redis實戰Spring BootRedis
- Springboot 整合 Netty 實戰Spring BootNetty
- 從0到1實現VueUI庫思路VueUI
- SpringBoot2.0應用(一):SpringBoot2.0簡單介紹Spring Boot
- DevOPS實戰:從0到1搭建基於Docker的Gitlab CI/CDdevDockerGitlab
- Flutter入門實戰:從0到1仿寫web版掘金AppFlutterWebAPP
- <<從0到1學C++>> 第3篇 從結構到類的演變C++
- Vue.js實戰(1):簡介Vue.js
- RabbitMQ簡介以及與SpringBoot整合示例MQSpring Boot
- Springboot 整合logback 日誌框架簡介Spring Boot框架
- Vue3 全家桶,從 0 到 1 實戰專案,新手有福了Vue
- 【React 實戰教程】從0到1 構建 github star管理工具ReactGithub
- [譯] Flutter 從 0 到 1Flutter
- Flutter實戰 | 從 0 搭建「GitHub」APP(一、專案簡介、技術選型)FlutterGithubAPP
- SpringBoot實戰之事務抽象Spring Boot抽象
- SpringBoot整合kafka全面實戰Spring BootKafka
- SpringBoot-13 Dubbo實戰Spring Boot
- SpringBoot實戰分析-MongoDB操作Spring BootMongoDB
- SpringBoot 實戰 (十二) | 整合 thymeleafSpring Boot
- SpringBoot 實戰 (三) | 使用 LomBokSpring BootLombok
- SpringBoot 實戰 (九) | 整合 MybatisSpring BootMyBatis