1.什么是SpringBoot?
SpringBoot是 Spring 開源組織下的子項目,是Spring組件一站式解決方案,主要是簡化了使用Spring的難度,簡省了繁重的配置,提供了各種啟動器,開發者能快速上手。
2.SpringBoot有哪些優點?
減少開發,測試時間。
使用JavaConfig有助於避免使用XML。
避免大量的Maven導入和各種版本沖突。
提供意見發展方法。
通過提供默認值快速開始開發。
沒有單獨的Web服務器需要。這意味着你不再需要啟動Tomcat,Glassfish或其他任何東西。
需要更少的配置 因為沒有web.xml文件。只需添加用@ Configuration注釋的類,然后添加用@Bean注釋的方法,Spring將自動加載對象並像以前一樣對其進行管理。您甚至可以將@Autowired添加到bean方法中,以使Spring自動裝入需要的依賴關系中。基於環境的配置 使用這些屬性,您可以將您正在使用的環境傳遞到應用程序:-Dspring.profiles.active = {enviornment}。在加載主應用程序屬性文件后,Spring將在(application{environment} .properties)中加載后續的應用程序屬性文件。
3.SpringBoot的核心配置文件有哪幾個?它們的區別是什么?
Spring Boot的核心配置文件是application 和 bootstrap 配置文件。
application 配置文件這個容易理解,主要用於 Spring Boot 項目的自動化配置。
bootstrap 配置文件有以下幾個應用場景。
使用 Spring Cloud Config 配置中心時,這時需要在 bootstrap 配置文件中添加連接到配置中心的配置屬性來加載外部配置中心的配置信息; 一些固定的不能被覆蓋的屬性;一些加密/解密的場景
4.SpringBoot的配置文件有哪幾種格式?它們有什么區別?
.properties 和 .yml,它們的區別主要是書寫格式不同。
1.properties
app.user.name = javastack 復制代碼
2.yml
app: user: name: javastack 復制代碼
5.Spring Boot 的核心注解是哪個?它主要由哪幾個注解組成的?
啟動類上面的注解是@SpringBootApplication,它也是SpringBoot的核心注解 主要組合包含了以下 3 個注解:
@SpringBootConfiguration:組合了 @Configuration 注解,實現配置文件的功能。
@EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring組件掃描。
6.開啟 Spring Boot 特性有哪幾種方式?
1)繼承spring-boot-starter-parent項目
2)導入spring-boot-dependencies項目依賴
7.Spring Boot 需要獨立的容器運行嗎?
可以不需要,內置了 Tomcat/ Jetty 等容器。
8.運行 Spring Boot 有哪幾種方式?
1)打包用命令或者放到容器中運行
2)用 Maven/ Gradle 插件運行
3)直接執行 main 方法運行
9.Spring Boot 自動配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自動配置的核心,首先它得是一個配置文件,其次根據類路徑下是否有這個類去自動配置。
10.Spring Boot 2.X 有什么新特性?與 1.X 有什么區別?
配置變更
JDK 版本升級
第三方類庫升級
響應式 Spring 編程支持
HTTP/2 支持
配置屬性綁定
更多改進與加強…
11.如何使用Spring Boot實現分頁和排序?
使用Spring Boot實現分頁非常簡單。使用Spring Data-JPA可以實現將可分頁的org.springframework.data.domain.Pageable傳遞給存儲庫方法。
12.如何實現Spring Boot應用程序的安全性?
為了實現Spring Boot的安全性,我們使用 spring-boot-starter-security依賴項,並且必須添加安全配置。它只需要很少的代碼。配置類將必須擴展WebSecurityConfigurerAdapter並覆蓋其方法。
13.如何集成Spring Boot和ActiveMQ
對於集成Spring Boot和ActiveMQ,我們使用spring-boot-starter-activemq 依賴關系。 它只需要很少的配置,並且不需要樣板代碼。
14.什么是YAML?
YAML是一種人類可讀的數據序列化語言。它通常用於配置文件。 與屬性文件相比,如果我們想要在配置文件中添加復雜的屬性,YAML文件就更加結構化,而且更少混淆。可以看出YAML具有分層配置數據。
15.Spring Boot中的監視器是什么?
Spring boot actuator是spring啟動框架中的重要功能之一。Spring boot監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接作為HTTP URL訪問的REST端點來檢查狀態。
16.什么是Swagger?你用Spring Boot實現了它嗎?
Swagger廣泛用於可視化API,使用Swagger UI為前端開發人員提供在線沙箱。Swagger是用於生成RESTful Web服務的可視化表示的工具,規范和完整框架實現。它使文檔能夠以與服務器相同的速度更新。當通過Swagger正確定義時,消費者可以使用最少量的實現邏輯來理解遠程服務並與其進行交互。因此,Swagger消除了調用服務時的猜測。
17.如何使用Spring Boot實現異常處理?
Spring提供了一種使用ControllerAdvice處理異常的非常有用的方法。 我們通過實現一個ControlerAdvice類,來處理控制器類拋出的所有異常。
18.RequestMapping 和 GetMapping 的不同之處在哪里?
RequestMapping 具有類屬性的,可以進行 GET,POST,PUT 或者其它的注釋中具有的請求方法。
GetMapping 是 GET 請求方法中的一個特例。它只是 ResquestMapping 的一個延伸,目的是為了提高清晰度。
19.Spring Boot 可以兼容老 Spring 項目嗎,如何做?
可以兼容,使用 @ImportResource 注解導入老 Spring 項目配置文件。
20.保護 Spring Boot 應用有哪些方法?
在生產中使用HTTPS 使用Snyk檢查你的依賴關系 升級到最新版本 啟用CSRF保護 使用內容安全策略防止XSS攻擊
21.Spring Boot 打成的 jar 和普通的 jar 有什么區別 ?
Spring Boot 項目最終打包成的 jar 是可執行 jar ,這種 jar 可以直接通過 java -jar xxx.jar 命令來運行,這種 jar 不可以作為普通的 jar 被其他項目依賴,即使依賴了也無法使用其中的類。
Spring Boot 的 jar 無法被其他項目依賴,主要還是他和普通 jar 的結構不同。普通的 jar 包,解壓后直接就是包名,包里就是我們的代碼,而 Spring Boot 打包成的可執行 jar 解壓后,在 \BOOT-INF\classes 目錄下才是我們的代碼,因此無法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,將 Spring Boot 項目打包成兩個 jar ,一個可執行,一個可引用。
22.Spring Boot 中如何實現定時任務 ?
定時任務也是一個常見的需求,Spring Boot 中對於定時任務的支持主要還是來自 Spring 框架。
在 Spring Boot 中使用定時任務主要有兩種不同的方式,一個就是使用 Spring 中的 @Scheduled 注解,另一個則是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通過 @Scheduled 注解來實現。
使用 Quartz ,則按照 Quartz 的方式,定義 Job 和 Trigger 即可。