2021最新 SpringBoot面試題精選(附刷題小程序)


推薦使用小程序閱讀

為了能讓您更加方便的閱讀
本文所有的面試題目均已整理至小程序《面試手冊
可以通過微信掃描(或長按)下圖的二維碼享受更好的閱讀體驗!


目錄


最近梳理匯總了Java面試常遇到的面試題;並將其開發成小程序《面試手冊》,方便大家閱讀,可微信掃描文章開頭的二維碼使用;包含了Java基礎並發JVM數據庫SpringSpringMVCSpringBootSpringCloud設計模式MQLinuxDocker等多個類型,資料持續更新中;侵權聯刪。

本人不才,如出現錯誤或者不准確的地方,望各位大神指正。

分類 地址
2021最新 Java基礎面試題精選(附刷題小程序) https://www.cnblogs.com/pengfeilu/p/14348974.html
2021最新 Java虛擬機(JVM)面試題精選(附刷題小程序) https://www.cnblogs.com/pengfeilu/p/14349869.html
2021最新 Redis面試題精選(附刷題小程序) https://www.cnblogs.com/pengfeilu/p/14349266.html
2021最新 MySQL常見面試題精選(附刷題小程序) https://www.cnblogs.com/pengfeilu/p/14537921.html
2021最新 Spring面試題精選(附刷題小程序) https://www.cnblogs.com/pengfeilu/p/14350135.html
2021最新 SpringMVC面試題精選(附刷題小程序) https://www.cnblogs.com/pengfeilu/p/14353548.html
2021最新 Java並發編程精選(附刷題小程序) https://www.cnblogs.com/pengfeilu/p/14540338.html
更多分類請點擊查看👉👉👉 https://blog.lupf.cn/category/ms

1. SpringBoot基礎

什么是SpringBoot?

  • 用來簡化Spring應用的初始搭建以及開發過程,使用特定的方式來進行配置
  • 創建獨立的Spring引用程序main方法運行
  • 嵌入的tomcat無需部署war文件
  • 簡化maven配置
  • 自動配置Spring添加對應的功能starter自動化配置

SpringBoot來簡化Spring應用開發,約定大於配置,去繁化簡

SpringBoot有哪些優點?

  • 獨立運行
    Spring Boot 而且內嵌了各種 servlet 容器,Tomcat、Jetty 等,現在不再需要打成war 包部署到容器中,Spring Boot 只要打成一個可執行的 jar 包就能獨立運行,所有的依賴包都在一個 jar 包內。

  • 簡化配置
    spring-boot-starter-web 啟動器自動依賴其他組件,簡少了 maven 的配置。

  • 自動配置
    Spring Boot 能根據當前類路徑下的類、jar 包來自動配置 bean,如添加一個 spring-boot-starter-web 啟動器就能擁有 web 的功能,無需其他配置。

  • 無代碼生成和XML配置
    Spring Boot 配置過程中無代碼生成,也無需 XML 配置文件就能完成所有配置工作,這一切都是借助於條件注解完成的,這也是 Spring4.x 的核心功能之一。

  • 避免大量的Maven導入和各種版本沖突

  • 應用監控
    Spring Boot 提供一系列端點可以監控服務及應用,做健康檢測。

SpringBoot的核心注解是什么?由那些注解組成?

啟動類上@SpringBootApplication是 SpringBoot 的核心注解

@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 {

主要組合包含了以下 3 個注解:

  • @SpringBootConfiguration
    組合了 @Configuration 注解,實現配置文件的功能。

  • @EnableAutoConfiguration
    打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

  • @ComponentScan
    Spring組件掃描。

SpringBoot、Spring MVC和Spring有什么區別?

  • Spring
    Spring最重要的特征是依賴注入。所有Spring Modules不是依賴注入就是IOC控制反轉。
    當我們恰當的使用DI或者是IOC的時候,可以開發松耦合應用。

  • Spring MVC
    Spring MVC提供了一種分離式的方法來開發Web應用。通過運用像DispatcherServelet,MoudlAndView 和 ViewResolver 等一些簡單的概念,開發 Web 應用將會變的非常簡單。

  • SpringBoot
    Spring和Spring MVC的問題在於需要配置大量的參數。
    SpringBoot通過一個自動配置和啟動的項來解決這個問題。

什么是JavaConfig?

Spring JavaConfig 是 Spring 社區的產品,它提供了配置 Spring IoC 容器的純Java 方法。因此它有助於避免使用 XML 配置。使用 JavaConfig 的優點在於:

  • 面向對象的配置
    由於配置被定義為 JavaConfig 中的類,因此用戶可以充分利用 Java 中的面向對象功能。一個配置類可以繼承另一個,重寫它的@Bean 方法等。
  • 減少或消除 XML 配置
    基於依賴注入原則的外化配置的好處已被證明。但是,許多開發人員不希望在 XML 和 Java 之間來回切換。JavaConfig 為開發人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從技術角度來講,只使用 JavaConfig 配置類來配置容器是可行的,但實際上很多人認為將JavaConfig 與 XML 混合匹配是理想的。
  • 類型安全和重構友好
    JavaConfig 提供了一種類型安全的方法來配置 Spring容器。由於 Java 5.0 對泛型的支持,現在可以按類型而不是按名稱檢索 bean,不需要任何強制轉換或基於字符串的查找。

SpringBoot啟動時都做了什么?

  1. SpringBoot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值
  2. 將這些值作為自動配置類導入容器 , 自動配置類就生效 , 幫我們進行自動配置工作;
  3. 整個J2EE的整體解決方案和自動配置都在springboot-autoconfigure的jar包中;
  4. 它會給容器中導入非常多的自動配置類 (xxxAutoConfiguration), 就是給容器中導入這個場景需要的所有組件 , 並配置好這些組件 ;
  5. 有了自動配置類 , 免去了我們手動編寫配置注入功能組件等的工作;

SpringBoot自動配置原理是什么?

  1. SpringBoot啟動會加載大量的自動配置類
  2. 我們看我們需要的功能有沒有在SpringBoot默認寫好的自動配置類當中;
  3. 我們再來看這個自動配置類中到底配置了哪些組件;(只要我們要用的組件存在在其中,我們就不需要再手動配置了)
  4. 給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性。我們只需要在配置文件中指定這些屬性的值即可;
    xxxxAutoConfigurartion:自動配置類;給容器中添加組件

xxxxProperties:封裝配置文件中相關屬性;

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

1、開發者工具 `Devtools` 全局配置參數;

2、單元測試上的 `@TestPropertySource` 注解指定的參數;

3、單元測試上的 `@SpringBootTest` 注解指定的參數;

4、命令行指定的參數,如 `java -jar springboot.jar --name="碼霸霸"`;

5、命令行中的 `SPRING_APPLICATION_JSONJSON` 指定參數, 如 `java -Dspring.application.json='{"name":"碼霸霸"}' -jar springboot.jar`;

6、`ServletConfig` 初始化參數;

7、`ServletContext` 初始化參數;

8、JNDI參數(如 `java:comp/env/spring.application.json`);

9、Java系統參數(來源:`System.getProperties()`);

10、操作系統環境變量參數;

11、`RandomValuePropertySource` 隨機數,僅匹配:`ramdom.*`;

12、JAR包外面的配置文件參數(`application-{profile}.properties(YAML)`);

13、JAR包里面的配置文件參數(`application-{profile}.properties(YAML)`);

14、JAR包外面的配置文件參數(`application.properties(YAML)`);

15、JAR包里面的配置文件參數(`application.properties(YAML)`);

16、`@Configuration`配置文件上 `@PropertySource` 注解加載的參數;

17、默認參數(通過 `SpringApplication.setDefaultProperties` 指定);

運行 SpringBoot 有哪幾種方式?

  1. 打包用命令或者放到容器中運行
  2. 用 Maven/ Gradle 插件運行
  3. 直接執行 main 方法運行

SpringBoot 需要獨立的容器運行嗎?

可以不需要,內置了 Tomcat/ Jetty 等容器。

開啟SpringBoot 特性有哪幾種方式?

  1. 繼承spring-boot-starter-parent項目
  2. 導入spring-boot-dependencies項目依賴

2. SpringBoot配置

什么是YAML?

YAML 是一種人類可讀的數據序列化語言。它通常用於配置文件。與屬性文件相比,如果我們想要在配置文件中添加復雜的屬性,YAML 文件就更加結構化,而且更少混淆。可以看出 YAML 具有分層配置數據。

YAML 配置的優勢在哪里 ?

YAML 現在可以算是非常流行的一種配置文件格式了,無論是前端還是后端,都可以見到 YAML 配置。那么 YAML 配置和傳統的 properties 配置相比到底有哪些優勢呢?

  1. 配置有序,在一些特殊的場景下,配置有序很關鍵
  2. 支持數組,數組中的元素可以是基本數據類型也可以是對象
  3. 簡潔

相比 properties 配置文件,YAML 還有一個缺點,就是不支持 @PropertySource 注解導入自定義的 YAML 配置。

如何在自定義端口上運行SpringBoot應用程序?

SpringBoot默認監聽的是8080端口;為了在自定義端口上運行 SpringBoot 應用程序,您可以在application.properties 中通過

server.port = 8888

指定端口;這樣就可以將監聽的端口修改為8888。

SpringBoot 是否可以使用 XML 配置 ?

Spring Boot 推薦使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通過 @ImportResource 注解可以引入一個 XML 配置。

SpringBoot核心配置文件是什么?

bootstrap.properties和application.properties

bootstrap.properties和application.properties 有何區別 ?

SpringBoot兩個核心的配置文件:

  • bootstrap(.yml 或者 .properties):boostrap 由父 ApplicationContext 加載的,比applicaton優先加載,配置在應用程序上下文的引導階段生效。一般來說我們在 SpringCloud Config 或者Nacos中會用到它。且boostrap里面的屬性不能被覆蓋;
  • application (.yml或者.properties):由ApplicatonContext 加載,用於 SpringBoot項目的自動化配置。

什么是Spring Profiles?

主要用來區分環境
Spring Profiles 允許用戶根據配置文件(dev,test,prod 等)來注冊 bean。因此,當應用程序在開發中運行時,只有某些 bean 可以加載,而在 PRODUCTION中,某些其他 bean 可以加載。假設我們的要求是 Swagger 文檔僅適用於 QA 環境,並且禁用所有其他文檔。這可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡單。

3. SpringBoot安全性

如何實現SpringBoot應用程序的安全性?

為了實現SpringBoot的安全性,我們使用spring-boot-starter-security依賴項,並且必須添加安全配置。它只需要很少的代碼。配置類將必須擴展WebSecurityConfigurerAdapter並覆蓋其方法。

比較一下Spring Security 和Shiro各自的優缺點 ?

由於SpringBoot官方提供了大量的非常方便的開箱即用的Starter,包括Spring Security的Starter ,使得在 SpringBoot中使用Spring Security變得更加容易,甚至只需要添加一個依賴就可以保護所有的接口,所以,如果是SpringBoot 項目,一般選擇 Spring Security 。當然這只是一個建議的組合,單純從技術上來說,無論怎么組合,都是沒有問題的。Shiro和Spring Security相比,主要有如下一些特點:

  1. Spring Security 是一個重量級的安全管理框架;Shiro 則是一個輕量級的安全管理框架
  2. Spring Security 概念復雜,配置繁瑣;Shiro 概念簡單、配置簡單
  3. Spring Security 功能強大;Shiro 功能簡單

什么是 CSRF 攻擊?

CSRF 代表跨站請求偽造。這是一種攻擊,迫使最終用戶在當前通過身份驗證的Web 應用程序上執行不需要的操作。CSRF 攻擊專門針對狀態改變請求,而不是數據竊取,因為攻擊者無法查看對偽造請求的響應。

SpringBoot中如何解決跨域問題 ?

跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以發送 GET 請求,無法發送其他類型的請求,在 RESTful 風格的應用中,就顯得非常雞肋,因此我們推薦在后端通過 (CORS,Cross-origin resource sharing) 來解決跨域問題。這種解決方案並非 Spring Boot 特有的,在傳統的 SSM 框架中,就可以通過 CORS 來解決跨域問題,只不過之前我們是在 XML 文件中配置 CORS ,現在可以通過實現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);
    }
}

項目中前后端分離部署,所以需要解決跨域的問題。
我們使用cookie存放用戶登錄的信息,在spring攔截器進行權限控制,當權限不符合時,直接返回給用戶固定的json結果。
當用戶登錄以后,正常使用;當用戶退出登錄狀態時或者token過期時,由於攔截器和跨域的順序有問題,出現了跨域的現象。
我們知道一個http請求,先走filter,到達servlet后才進行攔截器的處理,如果我們把cors放在filter里,就可以優先於權限攔截器執行。

@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);
    }
}

SpringBoot 中的監視器是什么

Spring boot actuator是spring啟動框架中的重要功能之一。Spring boot監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接作為HTTPURL訪問的REST端點來檢查狀態。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.0.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
server.tomcat.uri-encoding=UTF-8
# 程序運行端口
server.port=8888
# 監視程序運行端口
management.server.port=8090
# 激活所有的內置Endpoints
management.endpoints.web.exposure.include=*
# 開啟shutdown這個endpoint
management.endpoint.shutdown.enabled=true

如何在SpringBoot中禁用Actuator端點安全性?

默認情況下,所有敏感的HTTP端點都是安全的,只有具有ACTUATOR角色的用戶才能訪問它們。安全性是使用標准的
HttpServletRequest.isUserlnRole 方法實施的。我們可以使用management.security.enabled=false來禁用安全性。只有在執行機構端點在防火牆后訪問時,才建議禁用安全性。

如何監視所有SpringBoot微服務?

SpringBoot提供監視器端點以監控各個微服務的度量。這些端點對於獲取有關應用程序的信息(如它們是否已啟動)以及它們的組件(如數據庫等)是否正常運行很有幫助。但是,使用監視器的一個主要缺點或困難是,我們必須單獨打開應用程序的知識點以了解其狀態或健康狀況。想象一下涉及 50 個應用程序的微服務,管理員將不得不擊中所有 50 個應用程序的執行終端。為了幫助我們處理這種情況,我們將使用位於的開源項目。 它建立在 Spring Boot Actuator 之上,它提供了一個 Web UI,使我們能夠可視化多個應用程序的度量。

4. SpringBoot進階

什么是 WebSockets?

WebSocket是一種計算機通信協議,通過單個TCP連接提供全雙工通信信道。
1、WebSocket是雙向的 -使用 WebSocket 客戶端或服務器可以發起消息發送。
2、WebSocket是全雙工的 -客戶端和服務器通信是相互獨立的。
3、單個TCP連接 -初始連接使用 HTTP,然后將此連接升級到基於套接字的連接。然后這個單一連接用於所有未來的通信
4、Light與http相比,WebSocket消息數據交換要輕得多。

什么是 Spring Data?

Spring Data 是 Spring 的一個子項目。用於簡化數據庫訪問,支持NoSQL 和 關系數據存儲。其主要目標是使數據庫的訪問變得方便快捷。Spring Data 具有如下特點:

SpringData 項目支持 NoSQL 存儲:

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

SpringData 項目所支持的關系數據存儲技術:

  1. JDBC
  2. JPA

Spring Data Jpa 致力於減少數據訪問層 (DAO) 的開發量. 開發者唯一要做的,就是聲明持久層的接口,其他都交給 Spring Data JPA 來幫你完成!Spring Data JPA 通過規范方法的名字,根據符合規范的名字來確定方法需要實現什么樣的邏輯。

什么是 Spring Batch?

Spring Boot Batch 提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日志/跟蹤,事務管理,作業處理統計信息,作業重新啟動,跳過和資源管理。它還提供了更先進的技術服務和功能,通過優化和分區技術,可以實現極高批量和高性能批處理作業。簡單以及復雜的大批量批處理作業可以高度可擴展的方式利用框架處理重要大量的信息。

什么是 FreeMarker 模板?

FreeMarker 是一個基於 Java 的模板引擎,最初專注於使用 MVC 軟件架構進行動態網頁生成。使用 Freemarker 的主要優點是表示層和業務層的完全分離。程序員可以處理應用程序代碼,而設計人員可以處理 html 頁面設計。最后使用freemarker 可以將這些結合起來,給出最終的輸出頁面。

如何集成 SpringBoot和ActiveMQ?

對於集成 Spring Boot 和 ActiveMQ,我們使用依賴關系。 它只需要很少的配置,並且不需要樣板代碼。

前后端分離,如何維護接口文檔 ?

前后端分離開發日益流行,大部分情況下,我們都是通過 Spring Boot 做前后端分離開發,前后端分離一定會有接口文檔,不然會前后端會深深陷入到扯皮中。一個比較笨的方法就是使用 word 或者 md 來維護接口文檔,但是效率太低,接口一變,所有人手上的文檔都得變。在 Spring Boot 中,這個問題常見的解決方案是 Swagger ,使用 Swagger 我們可以快速生成一個接口文檔網站,接口一旦發生變化,文檔就會自動更新,所有開發工程師訪問這一個在線網站就可以獲取到最新的接口文檔,非常方便。

Swagger用過麽?他用來做什么?

Swagger廣泛用於可視化API,使用SwaggerUl為前端開發人員提供在線沙箱。Swagger 是用於生成RESTful Web服務的可視化表示的工具,規范和完整框架實現。它使文檔能夠以與服務器相同的速度更新。當通過Swagger 正確定義時,消費者可以使用最少量的實現邏輯來理解遠程服務並與其進行交互。因此,Swagger 消除了調用服務時的猜測。

<!--https://mvnrepository.com/artifact/io.springfox/springfox-swagger2-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!--https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

SpringBoot項目如何熱部署?

這可以使用 DEV 工具來實現。通過這種依賴關系,您可以節省任何更改,嵌入式tomcat 將重新啟動。Spring Boot 有一個開發工具(DevTools)模塊,它有助於提高開發人員的生產力。Java 開發人員面臨的一個主要挑戰是將文件更改自動部署到服務器並自動重啟服務器。開發人員可以重新加載 Spring Boot 上的更改,而無需重新啟動服務器。這將消除每次手動部署更改的需要。Spring Boot 在發布它的第一個版本時沒有這個功能。這是開發人員最需要的功能。DevTools 模塊完全滿足開發人員的需求。該模塊將在生產環境中被禁用。它還提供 H2 數據庫控制台以更好地測試應用程序。

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

SpringBoot 中的starter到底是什么 ?

首先,這個 Starter 並非什么新的技術點,基本上還是基於 Spring 已有功能來實現的。首先它提供了一個自動化配置類,一般命名為 XXXAutoConfiguration ,在這個配置類中通過條件注解來決定一個配置是否生效(條件注解就是 Spring 中原本就有的),然后它還會提供一系列的默認配置,也允許開發者根據實際情況自定義相關配置,然后通過類型安全的屬性注入將這些配置屬性注入進來,新注入的屬性會代替掉默認屬性。正因為如此,很多第三方框架,我們只需要引入依賴就可以直接使用了。當然,開發者也可以自定義 Starter

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

新創建一個 SpringBoot 項目,默認都是有 parent 的,這個 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:

  1. 定義了 Java 編譯版本為 1.8 。
  2. 使用 UTF-8 格式編碼。
  3. 繼承自 spring-boot-dependencies,這個里邊定義了依賴的版本,也正是因為繼承了這個依賴,所以我們在寫依賴時才不需要寫版本號。
  4. 執行打包操作的配置。
  5. 自動化的資源過濾。
  6. 自動化的插件配置。
  7. 針對 application.properties 和 application.yml 的資源過濾,包括通過 profile 定義的不同環境的配置文件,例如 application-dev.properties 和 application-dev.yml。

SpringBoot 打成的jar和普通的jar有什么區別 ?

Spring oot 項目最終打包成的 jar 是可執行 jar ,這種 jar 可以直接通過 java -jar xxx.jar 命令來運行,這種 jar 不可以作為普通的 jar 被其他項目依賴,即使依賴了也無法使用其中的類。

SpringBoot 的 jar 無法被其他項目依賴,主要還是他和普通 jar 的結構不同。普通的 jar 包,解壓后直接就是包名,包里就是我們的代碼,而 Spring Boot 打包成的可執行 jar 解壓后,在 \BOOT-INF\classes 目錄下才是我們的代碼,因此無法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,將 Spring Boot 項目打包成兩個 jar ,一個可執行,一個可引用。

如何使用SpringBoot實現異常處理?

Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實現一個 ControlerAdvice 類,來處理控制器類拋出的所有異常。

如何使用SpringBoot實現分頁和排序?

使用Spring Boot實現分頁非常簡單。使用Spring Data-JPA可以實現將可分頁的org.springframework.data.domain.Pageable傳遞給存儲庫方法。

public Page<User> find(Integer page, Integer size) {
    if (null == page) {
        page = 0;
    }
    if (CheckUtils.isEmpty(size)) {
        size = 10;
    }
    PageRequest pageable = PageRequest.of(page, size, Sort.Direction.DESC, "updateTime");
    Page<User> users = userRepository.findAll(pageable);
    return users;
}

微服務中如何實現 session 共享?

在微服務中,一個完整的項目被拆分成多個不相同的獨立的服務,各個服務獨立部署在不同的服務器上,各自的 session 被從物理空間上隔離開了,但是經常,我們需要在不同微服務之間共享 session ,常見的方案就是 Spring Session + Redis 來實現 session 共享。將所有微服務的 session 統一保存在 Redis 上,當各個微服務對 session 有相關的讀寫操作時,都去操作 Redis 上的 session 。這樣就實現了 session 共享,Spring Session 基於 Spring 中的代理過濾器實現,使得 session 的同步操作對開發人員而言是透明的,非常簡便。

SpringBoot 中如何實現定時任務?

定時任務也是一個常見的需求,SpringBoot 中對於定時任務的支持主要還是來自 Spring 框架。

在 SpringBoot 中使用定時任務主要有兩種不同的方式,一個就是使用 Spring 中的 @Scheduled 注解,另一個則是使用第三方框架 Quartz。

  • 使用Spring中的 @Scheduled的方式主要通過@Scheduled注解來實現。

  • 使用Quartz,則按照Quartz的方式,定義Job和Trigger即可。


微信掃碼關注公眾號,回復【資料】獲取更多學習、面試資料。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM