Spring Boot 是微服務中最好的 Java 框架. 咱們建議你可以成爲一名 Spring Boot 的專家。本文精選了三十五個常見的Spring Boot知識點,祝你一臂之力!html
問題一java
Spring最重要的特徵是依賴注入。全部 SpringModules 不是依賴注入就是 IOC 控制反轉。mysql
當咱們恰當的使用 DI 或者是 IOC 的時候,咱們能夠開發鬆耦合應用。鬆耦合應用的單元測試能夠很容易的進行。git
Spring MVC 提供了一種分離式的方法來開發 Web 應用。經過運用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些簡單的概念,開發 Web 應用將會變的很是簡單。github
Spring 和 SpringMVC 的問題在於須要配置大量的參數。web
Spring Boot 經過一個自動配置和啓動的項來目解決這個問題。爲了更快的構建產品就緒應用程序,Spring Boot 提供了一些非功能性特徵。spring
問題二sql
Spring 和 SpringMVC 的問題在於須要配置大量的參數。數據庫
咱們可否帶來更多的智能?當一個 MVC JAR 添加到應用程序中的時候,咱們可否自動配置一些 beans?編程
Spring 查看(CLASSPATH 上可用的框架)已存在的應用程序的配置。在此基礎上,Spring Boot 提供了配置應用程序和框架所須要的基本配置。這就是自動配置。
問題三
啓動器是一套方便的依賴沒描述符,它能夠放在本身的程序中。你能夠一站式的獲取你所須要的 Spring 和相關技術,而不須要依賴描述符的經過示例代碼搜索和複製黏貼的負載。
例如,若是你想使用 Sping 和 JPA 訪問數據庫,只須要你的項目包含 spring-boot-starter-data-jpa 依賴項,你就能夠完美進行。
問題四
你可否舉一個例子來解釋更多 Staters 的內容?
讓咱們來思考一個 Stater 的例子 -Spring Boot Stater Web。
若是你想開發一個 web 應用程序或者是公開 REST 服務的應用程序。Spring Boot Start Web 是首選。讓咱們使用 Spring Initializr 建立一個 Spring Boot Start Web 的快速項目。
Spring Boot Start Web 的依賴項
下面的截圖是添加進咱們應用程序的不一樣的依賴項
依賴項能夠被分爲:
Spring - core,beans,context,aop
Web MVC - (Spring MVC)
Jackson - for JSON Binding
Validation - Hibernate,Validation API
Enbedded Servlet Container - Tomcat
Logging - logback,slf4j
任何經典的 Web 應用程序都會使用全部這些依賴項。Spring Boot Starter Web 預先打包了這些依賴項。
做爲一個開發者,我不須要再擔憂這些依賴項和它們的兼容版本。
問題五
Spring Boot 也提供了其它的啓動器項目包括,包括用於開發特定類型應用程序的典型依賴項。
spring-boot-starter-web-services - SOAP Web Services;
spring-boot-starter-web - Web 和 RESTful 應用程序;
spring-boot-starter-test - 單元測試和集成測試;
spring-boot-starter-jdbc - 傳統的 JDBC;
spring-boot-starter-hateoas - 爲服務添加 HATEOAS 功能;
spring-boot-starter-security - 使用 SpringSecurity 進行身份驗證和受權;
spring-boot-starter-data-jpa - 帶有 Hibeernate 的 Spring Data JPA;
spring-boot-starter-data-rest - 使用 Spring Data REST 公佈簡單的 REST 服務;
問題六
Spring Boot 致力於快速產品就緒應用程序。爲此,它提供了一些譬如高速緩存,日誌記錄,監控和嵌入式服務器等開箱即用的非功能性特徵。
spring-boot-starter-actuator - 使用一些如監控和跟蹤應用的高級功能
spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat - 選擇您的特定嵌入式 Servlet 容器
spring-boot-starter-logging - 使用 logback 進行日誌記錄
spring-boot-starter-cache - 啓用 Spring Framework 的緩存支持
###Spring2 和 Spring5 所須要的最低 Java 版本是什麼?
Spring Boot 2.0 須要 Java8 或者更新的版本。Java6 和 Java7 已經再也不支持。
推薦閱讀:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes
問題七
Spring Initializr是啓動 Spring Boot Projects 的一個很好的工具。
就像上圖中所展現的同樣,咱們須要作一下幾步:
登陸 Spring Initializr,按照如下方式進行選擇:
選擇 com.in28minutes.springboot 爲組
選擇 studet-services 爲組件
選擇下面的依賴項
Web
Actuator
DevTools
點擊生 GenerateProject
將項目導入 Eclipse。文件 - 導入 - 現有的 Maven 項目
問題八
不是的。
Spring Initiatlizr 讓建立 Spring Boot 項目變的很容易,可是,你也能夠經過設置一個 maven 項目並添加正確的依賴項來開始一個項目。
在咱們的 Spring 課程中,咱們使用兩種方法來建立項目。
第一種方法是 start.spring.io 。
另一種方法是在項目的標題爲「Basic Web Application」處進行手動設置。
手動設置一個 maven 項目
這裏有幾個重要的步驟:
在 Eclipse 中,使用文件 - 新建 Maven 項目來建立一個新項目
添加依賴項。
添加 maven 插件。
添加 Spring Boot 應用程序類。
到這裏,準備工做已經作好!
問題九
spring-boot-maven-plugin 提供了一些像 jar 同樣打包或者運行應用程序的命令。
spring-boot:run 運行你的 SpringBooty 應用程序。
spring-boot:repackage 從新打包你的 jar 包或者是 war 包使其可執行
spring-boot:start 和 spring-boot:stop 管理 Spring Boot 應用程序的生命週期(也能夠說是爲了集成測試)。
spring-boot:build-info 生成執行器可使用的構造信息。
問題十
使用 Spring Boot 開發工具。
把 Spring Boot 開發工具添加進入你的項目是簡單的。
把下面的依賴項添加至你的 Spring Boot Project pom.xml 中
重啓應用程序,而後就能夠了。
一樣的,若是你想自動裝載頁面,有能夠看看 FiveReload
http://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-live-reload/.
在我測試的時候,發現了 LiveReload 漏洞,若是你測試時也發現了,請必定要告訴咱們。
問題十一
思考一下在你的虛擬機上部署應用程序須要些什麼。
第一步: 安裝 Java
第二部: 安裝 Web 或者是應用程序的服務器(Tomat/Wbesphere/Weblogic 等等)
第三部: 部署應用程序 war 包
若是咱們想簡化這些步驟,應該如何作呢?
讓咱們來思考如何使服務器成爲應用程序的一部分?
你只須要一個安裝了 Java 的虛擬機,就能夠直接在上面部署應用程序了,
是否是很爽?
這個想法是嵌入式服務器的起源。
當咱們建立一個能夠部署的應用程序的時候,咱們將會把服務器(例如,tomcat)嵌入到可部署的服務器中。
例如,對於一個 Spring Boot 應用程序來講,你能夠生成一個包含 Embedded Tomcat 的應用程序 jar。你就能夠想運行正常 Java 應用程序同樣來運行 web 應用程序了。
嵌入式服務器就是咱們的可執行單元包含服務器的二進制文件(例如,tomcat.jar)。
問題十二
在源文件夾下,建立一個名爲 static 的文件夾。而後,你能夠把你的靜態的內容放在這裏面。
例如,myapp.js 的路徑是 resources\static\js\myapp.js
你能夠參考它在 jsp 中的使用方法:
錯誤:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
該如何來修復這個錯誤呢?
兩種方法:
方法 1:關閉安全驗證
application.properties
management.security.enabled:FALSE
方法二:在日誌中搜索密碼並傳遞至請求標頭中
問題十三
來自://projects.spring.io/spring- data/
Spring Data 的使命是在保證底層數據存儲特殊性的前提下,爲數據訪問提供一個熟悉的,一致性的,基於 Spring 的編程模型。這使得使用數據訪問技術,關係數據庫和非關係數據庫,map-reduce 框架以及基於雲的數據服務變得很容易。
爲了讓它更簡單一些,Spring Data 提供了不受底層數據源限制的 Abstractions 接口。
下面來舉一個例子:
你能夠定義一簡單的庫,用來插入,更新,刪除和檢索代辦事項,而不須要編寫大量的代碼。
問題十四
Spring Data TEST 能夠用來發布關於 Spring 數據庫的 HATEOAS RESTful 資源。
下面是一個使用 JPA 的例子:
不須要寫太多代碼,咱們能夠發佈關於 Spring 數據庫的 RESTful API。
下面展現的是一些關於 TEST 服務器的例子
POST:
URL:http://localhost:8080/todos
Use Header:Content-Type:Type:application/json
Request Content
代碼以下:
響應內容:
響應包含新建立資源的 href。
問題十五
path- 這個資源要導出的路徑段。
collectionResourceRel- 生成指向集合資源的連接時使用的 rel 值。在生成 HATEOAS 連接時使用。
問題十六
若是你使用 Eclipse IDE,Eclipse maven 插件確保依賴項或者類文件的改變一經添加,就會被編譯並在目標文件中準備好!在這以後,就和其它的 Java 應用程序同樣了。
當你啓動 java 應用程序的時候,spring boot 自動配置文件就會魔法般的啓用了。
當 Spring Boot 應用程序檢測到你正在開發一個 web 應用程序的時候,它就會啓動 tomcat。
問題十七
在 spring-boot-starter-web 移除現有的依賴項,並把下面這些添加進去。
問題十八
如何使用 Spring Boot 生成一個 WAR 文件?
推薦閱讀:
https://spring.io/guides/gs/convert-jar-to-war/
下面有 spring 說明文檔直接的連接地址:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging
問題十九
你須要作下面兩個步驟:
在一個項目中生成一個 war 文件。
將它部署到你最喜歡的服務器(websphere 或者 Weblogic 或者 Tomcat and so on)。
第一步:這本入門指南應該有所幫助:
https://spring.io/guides/gs/convert-jar-to-war/
第二步:取決於你的服務器。
問題二十
RequestMapping 具備類屬性的,能夠進行 GET,POST,PUT 或者其它的註釋中具備的請求方法。
GetMapping 是 GET 請求方法中的一個特例。它只是 ResquestMapping 的一個延伸,目的是爲了提升清晰度。
問題二十一
咱們認爲 Spring Data Rest 很適合快速原型製造!在大型應用程序中使用須要謹慎。
經過 Spring Data REST 你能夠把你的數據實體做爲 RESTful 服務直接發佈。
當你設計 RESTful 服務器的時候,最佳實踐代表,你的接口應該考慮到兩件重要的事情:
你的模型範圍。
你的客戶。
經過 With Spring Data REST,你不須要再考慮這兩個方面,只須要做爲 TEST 服務發佈實體。
這就是爲何咱們建議使用 Spring Data Rest 在快速原型構造上面,或者做爲項目的初始解決方法。對於完整演變項目來講,這並非一個好的注意。
問題二十二
好消息是你能夠定製它。點擊連接「轉到完整版本」。你能夠配置你想要修改的包名稱!
問題二十三
這裏是完整的指南:
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
問題二十四
簡而言之
JPA 是一個規範或者接口
Hibernate 是 JPA 的一個實現
當咱們使用 JPA 的時候,咱們使用 javax.persistence 包中的註釋和接口時,不須要使用 hibernate 的導入包。
咱們建議使用 JPA 註釋,由於哦咱們沒有將其綁定到 Hibernate 做爲實現。後來(我知道 - 小於百分之一的概率),咱們可使用另外一種 JPA 實現。
問題二十五
咱們建議在服務層管理義務。商業業務邏輯在商業層或者服務層,與此同時,你想要執行的業務管理也在該層。
問題二十六
在 Spring Boot 項目中,當你確保下面的依賴項都在類路里面的時候,你能夠加載 H2 控制檯。
web 啓動器
h2
jpa 數據啓動器
其它的依賴項在下面:
須要注意的一些地方:
一個內部數據內存只在應用程序執行期間存在。這是學習框架的有效方式。
這不是你但願的真是世界應用程序的方式。
在問題「如何鏈接一個外部數據庫?」中,咱們解釋瞭如何鏈接一個你所選擇的數據庫。
問題二十七
由於 Spring Boot 是自動配置的。
下面是咱們添加的依賴項:
spring-boot-stater-data-jpa 對於 Hibernate 和 JPA 有過渡依賴性。
當 Spring Boot 在類路徑中檢測到 Hibernate 中,將會自動配置它爲默認的 JPA 實現。
問題二十八
這就是 Spring Boot 自動配置的魔力。
來自:https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html
Spring Boot auto-configuration 試圖自動配置你已經添加的基於 jar 依賴項的 Spring 應用程序。好比說,若是 HSQLDBis 存在你的類路徑中,而且,數據庫鏈接 bean 尚未手動配置,那麼咱們能夠自動配置一個內存數據庫。
進一步的閱讀:
http://www.springboottutorial.com/spring-boot-auto-configuration
問題二十九
讓咱們以 MySQL 爲例來思考這個問題:
第一步 - 把 mysql 鏈接器的依賴項添加至 pom.xml
第二步 - 從 pom.xml 中移除 H2 的依賴項
或者至少把它做爲測試的範圍。
第三步 - 安裝你的 MySQL 數據庫
更多的來看看這裏 -https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql
第四步 - 配置你的 MySQL 數據庫鏈接
配置 application.properties
spring.jpa.hibernate.ddl-auto=none spring.datasource.url=jdbc:mysql://localhost:3306/todo_example spring.datasource.username=todouser spring.datasource.password=YOUR_PASSWORD
第五步 - 從新啓動,你就準備好了!
就是這麼簡單!
問題三十
在 application.properties 裏面,列出了全部的默認值
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
找到下面的屬性
# Name of the datasource.
spring.datasource.name=testdb
若是你使用了 H2 內部存儲數據庫,它裏面肯定了 Spring Boot 用來安裝你的 H2 數據庫的名字。
問題三十一
將會報下面的錯誤
Cannot determine embedded database driver class for database type NONE
把 H2 添加至 pom.xml 中,而後重啓你的服務器
問題三十二
當你從數據庫讀取內容的時候,你想把事物中的用戶描述或者是其它描述設置爲只讀模式,以便於 Hebernate 不須要再次檢查實體的變化。這是很是高效的。
問題三十三
@Value 的問題在於,您能夠經過應用程序分配你配置值。更好的操做是採起集中的方法。
你可使用 @ConfigurationProperties 定義一個配置組件。
你能夠在 application.properties 中配置參數。
basic.value: true
basic.message: Dynamic Message
basic.number: 100
問題三十四
企業應用程序的開發是複雜的,你須要混合的環境:
Dev
QA
Stage
Production
在每一個環境中,你想要不一樣的應用程序配置。
配置文件有助於在不一樣的環境中進行不一樣的應用程序配置。
Spring 和 Spring Boot 提供了你能夠制定的功能。
不一樣配置文件中,不一樣環境的配置是什麼?
爲一個制定的環境設置活動的配置文件。
Spring Boot 將會根據特定環境中設置的活動配置文件來選擇應用程序的配置。
問題三十五
如何使用配置文件經過 Spring Boot 配置特定環境的配置?
配置文件不是設別環境的關鍵。
在下面的例子中,咱們將會用到兩個配置文件
dev
prod
缺省的應用程序配置在 application.properties 中。讓咱們來看下面的例子:
application.properties
basic.value= true
basic.message= Dynamic Message
basic.number= 100
咱們想要爲 dev 文件自定義 application.properties 屬性。咱們須要建立一個名爲 application-dev.properties 的文件,而且重寫咱們想要自定義的屬性。
application-dev.properties
basic.message: Dynamic Message in DEV
一旦你特定配置了配置文件,你須要在環境中設定一個活動的配置文件。
有多種方法能夠作到這一點:
在 VM 參數中使用 Dspring.profiles.active=prod
在 application.properties 中使用 spring.profiles.active=prod
一、什麼是springboot
用來簡化spring應用的初始搭建以及開發過程 使用特定的方式來進行配置(properties或yml文件)
建立獨立的spring引用程序 main方法運行
嵌入的Tomcat 無需部署war文件
簡化maven配置
自動配置spring添加對應功能starter自動化配置
答:spring boot來簡化spring應用開發,約定大於配置,去繁從簡,just run就能建立一個獨立的,產品級別的應用
二、Spring Boot有哪些優勢?
答:-快速建立獨立運行的spring項目與主流框架集成
-使用嵌入式的servlet容器,應用無需打包成war包
-starters自動依賴與版本控制
-大量的自動配置,簡化開發,也可修改默認值
-準生產環境的運行應用監控
-與雲計算的自然集成
三、如何從新加載Spring Boot上的更改,而無需從新啓動服務器?
這可使用DEV工具來實現。經過這種依賴關係,您能夠節省任何更改,嵌入式tomcat將從新啓動。
Spring Boot有一個開發工具(DevTools)模塊,它有助於提升開發人員的生產力。Java開發人員面臨的一個主要挑戰是將文件更改自動部署到服務器並自動重啓服務器。
開發人員能夠從新加載Spring Boot上的更改,而無需從新啓動服務器。這將消除每次手動部署更改的須要。Spring Boot在發佈它的第一個版本時沒有這個功能。
這是開發人員最須要的功能。DevTools模塊徹底知足開發人員的需求。該模塊將在生產環境中被禁用。它還提供H2數據庫控制檯以更好地測試應用程序。
org.springframework.boot
spring-boot-devtools
true
四、Spring Boot中的監視器是什麼?
Spring boot actuator是spring啓動框架中的重要功能之一。Spring boot監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。
有幾個指標必須在生產環境中進行檢查和監控。即便一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接做爲HTTP URL訪問的REST端點來檢查狀態。
五、什麼是YAML?
YAML是一種人類可讀的數據序列化語言。它一般用於配置文件。
與屬性文件相比,若是咱們想要在配置文件中添加複雜的屬性,YAML文件就更加結構化,並且更少混淆。能夠看出YAML具備分層配置數據。
六、springboot自動配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
會自動去maven中讀取每一個starter中的spring.factories文件 該文件裏配置了全部須要被建立spring容器中的bean
七、springboot讀取配置文件的方式
springboot默認讀取配置文件爲application.properties或者是application.yml
八、springboot集成mybatis的過程
添加mybatis的starter maven依賴
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0
在mybatis的接口中 添加@Mapper註解
在application.yml配置數據源信息
九、Spring Boot 的核心註解是哪一個?它主要由哪幾個註解組成的?
啓動類上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,主要組合包含了如下 3 個註解:
@SpringBootConfiguration:組合了 @Configuration 註解,實現配置文件的功能。
@EnableAutoConfiguration:打開自動配置的功能,也能夠關閉某個自動配置的選項,如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring組件掃描。
十、開啓 Spring Boot 特性有哪幾種方式?
1)繼承spring-boot-starter-parent項目
2)導入spring-boot-dependencies項目依賴
十一、Spring Boot 須要獨立的容器運行嗎?
能夠不須要,內置了 Tomcat/ Jetty 等容器。
十二、運行 Spring Boot 有哪幾種方式?
1)打包用命令或者放到容器中運行
2)用 Maven/ Gradle 插件運行
3)直接執行 main 方法運行
1三、你如何理解 Spring Boot 中的 Starters?
Starters能夠理解爲啓動器,它包含了一系列能夠集成到應用裏面的依賴包,你能夠一站式集成 Spring 及其餘技術,而不須要處處找示例代碼和依賴包。如你想使用 Spring JPA 訪問數據庫,只要加入 spring-boot-starter-data-jpa 啓動器依賴就能使用了。
1四、Spring Boot 支持哪些日誌框架?推薦和默認的日誌框架是哪一個?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 做爲日誌框架,若是你使用 Starters 啓動器,Spring Boot 將使用 Logback 做爲默認日誌框架.
1五、SpringBoot 實現熱部署有哪幾種方式?
主要有兩種方式: