面試題-SpringBoot

概述

說說 Spring Boot 和 Spring 的關(guān)系

spring boot 我理解就是把 spring spring mvc spring data jpa 等等的一些常用的常用的基礎(chǔ)框架組合起來残邀,提供默認(rèn)的配置,然后提供可插拔的設(shè)計(jì)碧查,就是各種 starter 蜗巧,來方便開發(fā)者使用這一系列的技術(shù)瞧省,套用官方的一句話, spring 家族發(fā)展到今天,已經(jīng)很龐大了邑贴,作為一個(gè)開發(fā)者束亏,如果想要使用 spring 家族一系列的技術(shù)铃在,需要一個(gè)一個(gè)的搞配置,然后還有個(gè)版本兼容性問題枪汪,其實(shí)挺麻煩的涌穆,偶爾也會(huì)有小坑出現(xiàn),其實(shí)蠻影響開發(fā)進(jìn)度雀久, spring boot 就是來解決這個(gè)問題宿稀,提供了一個(gè)解決方案吧,可以先不關(guān)心如何配置赖捌,可以快速的啟動(dòng)開發(fā)祝沸,進(jìn)行業(yè)務(wù)邏輯編寫矮烹,各種需要的技術(shù),加入 starter 就配置好了罩锐,直接使用奉狈,可以說追求開箱即用的效果吧.

如果說 Spring 是一個(gè)家族,其實(shí)就是涩惑;它包含 spring core, spring mvc仁期,spring boot與spring Cloud 等等;

那 spring boot 就像是這個(gè)家族中的大管家

什么是 Spring Boot竭恬?

Spring Boot 是 Spring 開源組織下的子項(xiàng)目跛蛋,是 Spring 組件一站式解決方案,主要是簡(jiǎn)化了使用 Spring 的難度痊硕,簡(jiǎn)省了繁重的配置赊级,提供了各種啟動(dòng)器,開發(fā)者能快速上手岔绸。

Spring Boot 有哪些優(yōu)點(diǎn)理逊?

Spring Boot 主要有如下優(yōu)點(diǎn):

  1. 容易上手,提升開發(fā)效率盒揉,為 Spring 開發(fā)提供一個(gè)更快晋被、更廣泛的入門體驗(yàn)。
  2. 開箱即用预烙,遠(yuǎn)離繁瑣的配置墨微。
  3. 提供了一系列大型項(xiàng)目通用的非業(yè)務(wù)性功能,例如:內(nèi)嵌服務(wù)器扁掸、安全管理翘县、運(yùn)行數(shù)據(jù)監(jiān)控、運(yùn)行狀況檢查和外部化配置等谴分。
  4. 沒有代碼生成锈麸,也不需要XML配置。
  5. 避免大量的 Maven 導(dǎo)入和各種版本沖突牺蹄。

Spring Boot 的核心注解是哪個(gè)忘伞?它主要由哪幾個(gè)注解組成的?

啟動(dòng)類上面的注解是@SpringBootApplication沙兰,它也是 Spring Boot 的核心注解氓奈,主要組合包含了以下 3 個(gè)注解:

@SpringBootConfiguration:組合了 @Configuration 注解,實(shí)現(xiàn)配置文件的功能鼎天。

@EnableAutoConfiguration:打開自動(dòng)配置的功能舀奶,也可以關(guān)閉某個(gè)自動(dòng)配置的選項(xiàng),如關(guān)閉數(shù)據(jù)源自動(dòng)配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })斋射。

@ComponentScan:Spring組件掃描育勺。

說說Spring Boot 啟動(dòng)原理

SpringBoot 將所有的常見開發(fā)功能但荤,分成了一個(gè)個(gè)場(chǎng)景啟動(dòng)器(starter),這樣我們需要開發(fā)什么功能涧至,就導(dǎo)入什么場(chǎng)景啟動(dòng)器依賴即可

配置

什么是 JavaConfig腹躁?

Spring JavaConfig 是 Spring 社區(qū)的產(chǎn)品,它提供了配置 Spring IoC 容器的純Java 方法南蓬。因此它有助于避免使用 XML 配置纺非。使用 JavaConfig 的優(yōu)點(diǎn)在于:

(1)面向?qū)ο蟮呐渲谩S捎谂渲帽欢x為 JavaConfig 中的類蓖康,因此用戶可以充分利用 Java 中的面向?qū)ο蠊δ茴盱拧R粋€(gè)配置類可以繼承另一個(gè)垒手,重寫它的@Bean 方法等蒜焊。

(2)減少或消除 XML 配置】票幔基于依賴注入原則的外化配置的好處已被證明泳梆。但是,許多開發(fā)人員不希望在 XML 和 Java 之間來回切換榜掌。JavaConfig 為開發(fā)人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器优妙。從技術(shù)角度來講,只使用 JavaConfig 配置類來配置容器是可行的憎账,但實(shí)際上很多人認(rèn)為將JavaConfig 與 XML 混合匹配是理想的套硼。

(3)類型安全和重構(gòu)友好。JavaConfig 提供了一種類型安全的方法來配置 Spring容器胞皱。由于 Java 5.0 對(duì)泛型的支持邪意,現(xiàn)在可以按類型而不是按名稱檢索 bean,不需要任何強(qiáng)制轉(zhuǎn)換或基于字符串的查找反砌。

Spring Boot 自動(dòng)配置原理是什么雾鬼?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自動(dòng)配置的核心,

@EnableAutoConfiguration 給容器導(dǎo)入META-INF/spring.factories 里定義的自動(dòng)配置類宴树。

篩選有效的自動(dòng)配置類策菜。

每一個(gè)自動(dòng)配置類結(jié)合對(duì)應(yīng)的 xxxProperties.java 讀取配置文件進(jìn)行自動(dòng)配置功能

你如何理解 Spring Boot 配置加載順序?

在 Spring Boot 里面酒贬,可以使用以下幾種方式來加載配置又憨。

1)properties文件;

2)YAML文件锭吨;

3)系統(tǒng)環(huán)境變量蠢莺;

4)命令行參數(shù);

等等……

什么是 YAML耐齐?

YAML 是一種人類可讀的數(shù)據(jù)序列化語言浪秘。它通常用于配置文件蒋情。與屬性文件相比,如果我們想要在配置文件中添加復(fù)雜的屬性耸携,YAML 文件就更加結(jié)構(gòu)化棵癣,而且更少混淆《嵫埽可以看出 YAML 具有分層配置數(shù)據(jù)狈谊。

YAML 配置的優(yōu)勢(shì)在哪里 ?

YAML 現(xiàn)在可以算是非常流行的一種配置文件格式了,無論是前端還是后端沟沙,都可以見到 YAML 配置河劝。那么 YAML 配置和傳統(tǒng)的 properties 配置相比到底有哪些優(yōu)勢(shì)呢?

  1. 配置有序矛紫,在一些特殊的場(chǎng)景下赎瞎,配置有序很關(guān)鍵
  2. 支持?jǐn)?shù)組,數(shù)組中的元素可以是基本數(shù)據(jù)類型也可以是對(duì)象
  3. 簡(jiǎn)潔

相比 properties 配置文件颊咬,YAML 還有一個(gè)缺點(diǎn)务甥,就是不支持 @PropertySource 注解導(dǎo)入自定義的 YAML 配置。

Spring Boot 是否可以使用 XML 配置 ?

Spring Boot 推薦使用 Java 配置而非 XML 配置喳篇,但是 Spring Boot 中也可以使用 XML 配置敞临,通過 @ImportResource 注解可以引入一個(gè) XML 配置。

spring boot 核心配置文件是什么麸澜?bootstrap.properties 和 application.properties 有何區(qū)別 ?

單純做 Spring Boot 開發(fā)挺尿,可能不太容易遇到 bootstrap.properties 配置文件,但是在結(jié)合 Spring Cloud 時(shí)炊邦,這個(gè)配置就會(huì)經(jīng)常遇到了编矾,特別是在需要加載一些遠(yuǎn)程配置文件的時(shí)侯。

spring boot 核心的兩個(gè)配置文件:

  • bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加載的铣耘,比 applicaton 優(yōu)先加載洽沟,配置在應(yīng)用程序上下文的引導(dǎo)階段生效。一般來說我們?cè)?Spring Cloud Config 或者 Nacos 中會(huì)用到它蜗细。且 boostrap 里面的屬性不能被覆蓋裆操;
  • application (. yml 或者 . properties): 由ApplicatonContext 加載,用于 spring boot 項(xiàng)目的自動(dòng)化配置炉媒。

什么是 Spring Profiles踪区?

Spring Profiles 允許用戶根據(jù)配置文件(dev,test吊骤,prod 等)來注冊(cè) bean缎岗。因此,當(dāng)應(yīng)用程序在開發(fā)中運(yùn)行時(shí)白粉,只有某些 bean 可以加載传泊,而在 PRODUCTION中鼠渺,某些其他 bean 可以加載。假設(shè)我們的要求是 Swagger 文檔僅適用于 QA 環(huán)境眷细,并且禁用所有其他文檔拦盹。這可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡(jiǎn)單溪椎。

如何在自定義端口上運(yùn)行 Spring Boot 應(yīng)用程序普舆?

為了在自定義端口上運(yùn)行 Spring Boot 應(yīng)用程序,您可以在application.properties 中指定端口校读。server.port = 8090

安全

如何實(shí)現(xiàn) Spring Boot 應(yīng)用程序的安全性沼侣?

為了實(shí)現(xiàn) Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項(xiàng)歉秫,并且必須添加安全配置蛾洛。它只需要很少的代碼端考。配置類將必須擴(kuò)展WebSecurityConfigurerAdapter 并覆蓋其方法雅潭。

比較一下 Spring Security 和 Shiro 各自的優(yōu)缺點(diǎn) ?

由于 Spring Boot 官方提供了大量的非常方便的開箱即用的 Starter ,包括 Spring Security 的 Starter 却特,使得在 Spring Boot 中使用 Spring Security 變得更加容易,甚至只需要添加一個(gè)依賴就可以保護(hù)所有的接口筛圆,所以裂明,如果是 Spring Boot 項(xiàng)目,一般選擇 Spring Security 太援。當(dāng)然這只是一個(gè)建議的組合闽晦,單純從技術(shù)上來說,無論怎么組合提岔,都是沒有問題的仙蛉。Shiro 和 Spring Security 相比,主要有如下一些特點(diǎn):

  1. Spring Security 是一個(gè)重量級(jí)的安全管理框架碱蒙;Shiro 則是一個(gè)輕量級(jí)的安全管理框架
  2. Spring Security 概念復(fù)雜荠瘪,配置繁瑣;Shiro 概念簡(jiǎn)單赛惩、配置簡(jiǎn)單
  3. Spring Security 功能強(qiáng)大哀墓;Shiro 功能簡(jiǎn)單

Spring Boot 中如何解決跨域問題 ?

跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以發(fā)送 GET 請(qǐng)求喷兼,無法發(fā)送其他類型的請(qǐng)求篮绰,在 RESTful 風(fēng)格的應(yīng)用中,就顯得非常雞肋季惯,因此我們推薦在后端通過 (CORS吠各,Cross-origin resource sharing) 來解決跨域問題臀突。這種解決方案并非 Spring Boot 特有的,在傳統(tǒng)的 SSM 框架中贾漏,就可以通過 CORS 來解決跨域問題惧辈,只不過之前我們是在 XML 文件中配置 CORS ,現(xiàn)在可以通過實(shí)現(xiàn)WebMvcConfigurer接口然后重寫addCorsMappings方法解決跨域問題磕瓷。

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .maxAge(3600);
    }

}
12345678910111213

項(xiàng)目中前后端分離部署盒齿,所以需要解決跨域的問題。
我們使用cookie存放用戶登錄的信息困食,在spring攔截器進(jìn)行權(quán)限控制边翁,當(dāng)權(quán)限不符合時(shí),直接返回給用戶固定的json結(jié)果硕盹。
當(dāng)用戶登錄以后符匾,正常使用;當(dāng)用戶退出登錄狀態(tài)時(shí)或者token過期時(shí)瘩例,由于攔截器和跨域的順序有問題啊胶,出現(xiàn)了跨域的現(xiàn)象。
我們知道一個(gè)http請(qǐng)求垛贤,先走filter焰坪,到達(dá)servlet后才進(jìn)行攔截器的處理,如果我們把cors放在filter里聘惦,就可以優(yōu)先于權(quán)限攔截器執(zhí)行某饰。

@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }

}
12345678910111213141516

什么是 CSRF 攻擊?

CSRF 代表跨站請(qǐng)求偽造善绎。這是一種攻擊黔漂,迫使最終用戶在當(dāng)前通過身份驗(yàn)證的Web 應(yīng)用程序上執(zhí)行不需要的操作。CSRF 攻擊專門針對(duì)狀態(tài)改變請(qǐng)求禀酱,而不是數(shù)據(jù)竊取炬守,因?yàn)楣粽邿o法查看對(duì)偽造請(qǐng)求的響應(yīng)。

監(jiān)視器

Spring Boot 中的監(jiān)視器是什么剂跟?

Spring boot actuator 是 spring 啟動(dòng)框架中的重要功能之一减途。Spring boot 監(jiān)視器可幫助您訪問生產(chǎn)環(huán)境中正在運(yùn)行的應(yīng)用程序的當(dāng)前狀態(tài)。有幾個(gè)指標(biāo)必須在生產(chǎn)環(huán)境中進(jìn)行檢查和監(jiān)控浩聋。即使一些外部應(yīng)用程序可能正在使用這些服務(wù)來向相關(guān)人員觸發(fā)警報(bào)消息观蜗。監(jiān)視器模塊公開了一組可直接作為 HTTP URL 訪問的REST 端點(diǎn)來檢查狀態(tài)。

如何在 Spring Boot 中禁用 Actuator 端點(diǎn)安全性衣洁?

默認(rèn)情況下墓捻,所有敏感的 HTTP 端點(diǎn)都是安全的,只有具有 ACTUATOR 角色的用戶才能訪問它們。安全性是使用標(biāo)準(zhǔn)的 HttpServletRequest.isUserInRole 方法實(shí)施的撤卢。 我們可以使用來禁用安全性。只有在執(zhí)行機(jī)構(gòu)端點(diǎn)在防火墻后訪問時(shí)梧兼,才建議禁用安全性放吩。

我們?nèi)绾伪O(jiān)視所有 Spring Boot 微服務(wù)?

Spring Boot 提供監(jiān)視器端點(diǎn)以監(jiān)控各個(gè)微服務(wù)的度量羽杰。這些端點(diǎn)對(duì)于獲取有關(guān)應(yīng)用程序的信息(如它們是否已啟動(dòng))以及它們的組件(如數(shù)據(jù)庫等)是否正常運(yùn)行很有幫助渡紫。但是,使用監(jiān)視器的一個(gè)主要缺點(diǎn)或困難是考赛,我們必須單獨(dú)打開應(yīng)用程序的知識(shí)點(diǎn)以了解其狀態(tài)或健康狀況惕澎。想象一下涉及 50 個(gè)應(yīng)用程序的微服務(wù),管理員將不得不擊中所有 50 個(gè)應(yīng)用程序的執(zhí)行終端颜骤。為了幫助我們處理這種情況唧喉,我們將使用位于的開源項(xiàng)目。 它建立在 Spring Boot Actuator 之上忍抽,它提供了一個(gè) Web UI八孝,使我們能夠可視化多個(gè)應(yīng)用程序的度量。

整合第三方項(xiàng)目

什么是 WebSockets鸠项?

WebSocket 是一種計(jì)算機(jī)通信協(xié)議干跛,通過單個(gè) TCP 連接提供全雙工通信信道。

1锈锤、WebSocket 是雙向的 -使用 WebSocket 客戶端或服務(wù)器可以發(fā)起消息發(fā)送驯鳖。

2、WebSocket 是全雙工的 -客戶端和服務(wù)器通信是相互獨(dú)立的久免。

3、單個(gè) TCP 連接 -初始連接使用 HTTP扭弧,然后將此連接升級(jí)到基于套接字的連接阎姥。然后這個(gè)單一連接用于所有未來的通信

4、Light -與 http 相比鸽捻,WebSocket 消息數(shù)據(jù)交換要輕得多呼巴。

什么是 Spring Data ?

Spring Data 是 Spring 的一個(gè)子項(xiàng)目。用于簡(jiǎn)化數(shù)據(jù)庫訪問御蒲,支持NoSQL 和 關(guān)系數(shù)據(jù)存儲(chǔ)衣赶。其主要目標(biāo)是使數(shù)據(jù)庫的訪問變得方便快捷。Spring Data 具有如下特點(diǎn):

SpringData 項(xiàng)目支持 NoSQL 存儲(chǔ):

  1. MongoDB (文檔數(shù)據(jù)庫)
  2. Neo4j(圖形數(shù)據(jù)庫)
  3. Redis(鍵/值存儲(chǔ))
  4. Hbase(列族數(shù)據(jù)庫)

SpringData 項(xiàng)目所支持的關(guān)系數(shù)據(jù)存儲(chǔ)技術(shù):

  1. JDBC
  2. JPA

Spring Data Jpa 致力于減少數(shù)據(jù)訪問層 (DAO) 的開發(fā)量. 開發(fā)者唯一要做的厚满,就是聲明持久層的接口府瞄,其他都交給 Spring Data JPA 來幫你完成!Spring Data JPA 通過規(guī)范方法的名字碘箍,根據(jù)符合規(guī)范的名字來確定方法需要實(shí)現(xiàn)什么樣的邏輯遵馆。

什么是 Spring Batch鲸郊?

Spring Boot Batch 提供可重用的函數(shù),這些函數(shù)在處理大量記錄時(shí)非常重要货邓,包括日志/跟蹤秆撮,事務(wù)管理,作業(yè)處理統(tǒng)計(jì)信息换况,作業(yè)重新啟動(dòng)职辨,跳過和資源管理。它還提供了更先進(jìn)的技術(shù)服務(wù)和功能戈二,通過優(yōu)化和分區(qū)技術(shù)舒裤,可以實(shí)現(xiàn)極高批量和高性能批處理作業(yè)。簡(jiǎn)單以及復(fù)雜的大批量批處理作業(yè)可以高度可擴(kuò)展的方式利用框架處理重要大量的信息挽拂。

什么是 FreeMarker 模板惭每?

FreeMarker 是一個(gè)基于 Java 的模板引擎,最初專注于使用 MVC 軟件架構(gòu)進(jìn)行動(dòng)態(tài)網(wǎng)頁生成亏栈。使用 Freemarker 的主要優(yōu)點(diǎn)是表示層和業(yè)務(wù)層的完全分離台腥。程序員可以處理應(yīng)用程序代碼,而設(shè)計(jì)人員可以處理 html 頁面設(shè)計(jì)绒北。最后使用freemarker 可以將這些結(jié)合起來黎侈,給出最終的輸出頁面。

如何集成 Spring Boot 和 ActiveMQ闷游?

對(duì)于集成 Spring Boot 和 ActiveMQ峻汉,我們使用依賴關(guān)系。 它只需要很少的配置脐往,并且不需要樣板代碼休吠。

什么是 Apache Kafka?

Apache Kafka 是一個(gè)分布式發(fā)布 - 訂閱消息系統(tǒng)业簿。它是一個(gè)可擴(kuò)展的瘤礁,容錯(cuò)的發(fā)布 - 訂閱消息系統(tǒng),它使我們能夠構(gòu)建分布式應(yīng)用程序梅尤。這是一個(gè) Apache 頂級(jí)項(xiàng)目柜思。Kafka 適合離線和在線消息消費(fèi)。

什么是 Swagger巷燥?你用 Spring Boot 實(shí)現(xiàn)了它嗎赡盘?

Swagger 廣泛用于可視化 API,使用 Swagger UI 為前端開發(fā)人員提供在線沙箱缰揪。Swagger 是用于生成 RESTful Web 服務(wù)的可視化表示的工具陨享,規(guī)范和完整框架實(shí)現(xiàn)。它使文檔能夠以與服務(wù)器相同的速度更新。當(dāng)通過 Swagger 正確定義時(shí)霉咨,消費(fèi)者可以使用最少量的實(shí)現(xiàn)邏輯來理解遠(yuǎn)程服務(wù)并與其進(jìn)行交互蛙紫。因此,Swagger消除了調(diào)用服務(wù)時(shí)的猜測(cè)途戒。

前后端分離坑傅,如何維護(hù)接口文檔 ?

前后端分離開發(fā)日益流行,大部分情況下喷斋,我們都是通過 Spring Boot 做前后端分離開發(fā)唁毒,前后端分離一定會(huì)有接口文檔,不然會(huì)前后端會(huì)深深陷入到扯皮中星爪。一個(gè)比較笨的方法就是使用 word 或者 md 來維護(hù)接口文檔浆西,但是效率太低,接口一變顽腾,所有人手上的文檔都得變近零。在 Spring Boot 中,這個(gè)問題常見的解決方案是 Swagger 抄肖,使用 Swagger 我們可以快速生成一個(gè)接口文檔網(wǎng)站久信,接口一旦發(fā)生變化,文檔就會(huì)自動(dòng)更新漓摩,所有開發(fā)工程師訪問這一個(gè)在線網(wǎng)站就可以獲取到最新的接口文檔裙士,非常方便。

其他

如何重新加載 Spring Boot 上的更改管毙,而無需重新啟動(dòng)服務(wù)器腿椎?Spring Boot項(xiàng)目如何熱部署?

這可以使用 DEV 工具來實(shí)現(xiàn)夭咬。通過這種依賴關(guān)系啃炸,您可以節(jié)省任何更改,嵌入式tomcat 將重新啟動(dòng)卓舵。Spring Boot 有一個(gè)開發(fā)工具(DevTools)模塊肮帐,它有助于提高開發(fā)人員的生產(chǎn)力。Java 開發(fā)人員面臨的一個(gè)主要挑戰(zhàn)是將文件更改自動(dòng)部署到服務(wù)器并自動(dòng)重啟服務(wù)器边器。開發(fā)人員可以重新加載 Spring Boot 上的更改,而無需重新啟動(dòng)服務(wù)器托修。這將消除每次手動(dòng)部署更改的需要忘巧。Spring Boot 在發(fā)布它的第一個(gè)版本時(shí)沒有這個(gè)功能。這是開發(fā)人員最需要的功能睦刃。DevTools 模塊完全滿足開發(fā)人員的需求砚嘴。該模塊將在生產(chǎn)環(huán)境中被禁用。它還提供 H2 數(shù)據(jù)庫控制臺(tái)以更好地測(cè)試應(yīng)用程序。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
1234

您使用了哪些 starter maven 依賴項(xiàng)际长?

使用了下面的一些依賴項(xiàng)

spring-boot-starter-activemq

spring-boot-starter-security

這有助于增加更少的依賴關(guān)系耸采,并減少版本的沖突。

Spring Boot 中的 starter 到底是什么 ?

首先工育,這個(gè) Starter 并非什么新的技術(shù)點(diǎn)虾宇,基本上還是基于 Spring 已有功能來實(shí)現(xiàn)的。首先它提供了一個(gè)自動(dòng)化配置類如绸,一般命名為 XXXAutoConfiguration 嘱朽,在這個(gè)配置類中通過條件注解來決定一個(gè)配置是否生效(條件注解就是 Spring 中原本就有的),然后它還會(huì)提供一系列的默認(rèn)配置怔接,也允許開發(fā)者根據(jù)實(shí)際情況自定義相關(guān)配置搪泳,然后通過類型安全的屬性注入將這些配置屬性注入進(jìn)來,新注入的屬性會(huì)代替掉默認(rèn)屬性扼脐。正因?yàn)槿绱税毒芏嗟谌娇蚣埽覀冎恍枰胍蕾嚲涂梢灾苯邮褂昧送呶辍.?dāng)然艰赞,開發(fā)者也可以自定義 Starter

spring-boot-starter-parent 有什么用 ?

我們都知道,新創(chuàng)建一個(gè) Spring Boot 項(xiàng)目脏榆,默認(rèn)都是有 parent 的猖毫,這個(gè) parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:

  1. 定義了 Java 編譯版本為 1.8 须喂。
  2. 使用 UTF-8 格式編碼吁断。
  3. 繼承自 spring-boot-dependencies,這個(gè)里邊定義了依賴的版本坞生,也正是因?yàn)槔^承了這個(gè)依賴仔役,所以我們?cè)趯懸蕾嚂r(shí)才不需要寫版本號(hào)。
  4. 執(zhí)行打包操作的配置是己。
  5. 自動(dòng)化的資源過濾又兵。
  6. 自動(dòng)化的插件配置。
  7. 針對(duì) application.properties 和 application.yml 的資源過濾卒废,包括通過 profile 定義的不同環(huán)境的配置文件沛厨,例如 application-dev.properties 和 application-dev.yml。

Spring Boot 打成的 jar 和普通的 jar 有什么區(qū)別 ?

Spring Boot 項(xiàng)目最終打包成的 jar 是可執(zhí)行 jar 摔认,這種 jar 可以直接通過 java -jar xxx.jar 命令來運(yùn)行逆皮,這種 jar 不可以作為普通的 jar 被其他項(xiàng)目依賴,即使依賴了也無法使用其中的類参袱。

Spring Boot 的 jar 無法被其他項(xiàng)目依賴电谣,主要還是他和普通 jar 的結(jié)構(gòu)不同秽梅。普通的 jar 包,解壓后直接就是包名剿牺,包里就是我們的代碼企垦,而 Spring Boot 打包成的可執(zhí)行 jar 解壓后,在 \BOOT-INF\classes 目錄下才是我們的代碼晒来,因此無法被直接引用钞诡。如果非要引用,可以在 pom.xml 文件中增加配置潜索,將 Spring Boot 項(xiàng)目打包成兩個(gè) jar 臭增,一個(gè)可執(zhí)行,一個(gè)可引用竹习。

運(yùn)行 Spring Boot 有哪幾種方式誊抛?

1)打包用命令或者放到容器中運(yùn)行

2)用 Maven/ Gradle 插件運(yùn)行

3)直接執(zhí)行 main 方法運(yùn)行

Spring Boot 需要獨(dú)立的容器運(yùn)行嗎?

可以不需要整陌,內(nèi)置了 Tomcat/ Jetty 等容器拗窃。

開啟 Spring Boot 特性有哪幾種方式?

1)繼承spring-boot-starter-parent項(xiàng)目

2)導(dǎo)入spring-boot-dependencies項(xiàng)目依賴

如何使用 Spring Boot 實(shí)現(xiàn)異常處理泌辫?

Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法随夸。 我們通過實(shí)現(xiàn)一個(gè) ControlerAdvice 類,來處理控制器類拋出的所有異常震放。

如何使用 Spring Boot 實(shí)現(xiàn)分頁和排序宾毒?

使用 Spring Boot 實(shí)現(xiàn)分頁非常簡(jiǎn)單。使用 Spring Data-JPA 可以實(shí)現(xiàn)將可分頁的傳遞給存儲(chǔ)庫方法殿遂。

微服務(wù)中如何實(shí)現(xiàn) session 共享 ?

在微服務(wù)中诈铛,一個(gè)完整的項(xiàng)目被拆分成多個(gè)不相同的獨(dú)立的服務(wù),各個(gè)服務(wù)獨(dú)立部署在不同的服務(wù)器上墨礁,各自的 session 被從物理空間上隔離開了幢竹,但是經(jīng)常,我們需要在不同微服務(wù)之間共享 session 恩静,常見的方案就是 Spring Session + Redis 來實(shí)現(xiàn) session 共享焕毫。將所有微服務(wù)的 session 統(tǒng)一保存在 Redis 上,當(dāng)各個(gè)微服務(wù)對(duì) session 有相關(guān)的讀寫操作時(shí)驶乾,都去操作 Redis 上的 session 邑飒。這樣就實(shí)現(xiàn)了 session 共享,Spring Session 基于 Spring 中的代理過濾器實(shí)現(xiàn)级乐,使得 session 的同步操作對(duì)開發(fā)人員而言是透明的幸乒,非常簡(jiǎn)便。

Spring Boot 中如何實(shí)現(xiàn)定時(shí)任務(wù) ?

定時(shí)任務(wù)也是一個(gè)常見的需求唇牧,Spring Boot 中對(duì)于定時(shí)任務(wù)的支持主要還是來自 Spring 框架罕扎。

在 Spring Boot 中使用定時(shí)任務(wù)主要有兩種不同的方式,一個(gè)就是使用 Spring 中的 @Scheduled 注解丐重,另一個(gè)則是使用第三方框架 Quartz腔召。

使用 Spring 中的 @Scheduled 的方式主要通過 @Scheduled 注解來實(shí)現(xiàn)。

使用 Quartz 扮惦,則按照 Quartz 的方式臀蛛,定義 Job 和 Trigger 即可。

本文由mdnice多平臺(tái)發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崖蜜,一起剝皮案震驚了整個(gè)濱河市浊仆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豫领,老刑警劉巖抡柿,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異等恐,居然都是意外死亡洲劣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門课蔬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囱稽,“玉大人,你說我怎么就攤上這事二跋≌骄” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵扎即,是天一觀的道長吞获。 經(jīng)常有香客問我,道長铺遂,這世上最難降的妖魔是什么衫哥? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮襟锐,結(jié)果婚禮上撤逢,老公的妹妹穿的比我還像新娘。我一直安慰自己粮坞,他們只是感情好蚊荣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莫杈,像睡著了一般互例。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筝闹,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天媳叨,我揣著相機(jī)與錄音腥光,去河邊找鬼。 笑死糊秆,一個(gè)胖子當(dāng)著我的面吹牛武福,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痘番,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捉片,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了汞舱?” 一聲冷哼從身側(cè)響起伍纫,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昂芜,沒想到半個(gè)月后莹规,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡说铃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年访惜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腻扇。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡债热,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幼苛,到底是詐尸還是另有隱情窒篱,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布舶沿,位于F島的核電站墙杯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏括荡。R本人自食惡果不足惜高镐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畸冲。 院中可真熱鬧嫉髓,春花似錦、人聲如沸邑闲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苫耸。三九已至州邢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褪子,已是汗流浹背量淌。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工骗村, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人类少。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓叙身,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硫狞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容