一篇部落格帶你輕鬆應對Springboot面試

1. SpringBoot簡介

SpringBoot是簡化Spring應用開發的一個框架。他整合了Spring的技術棧,提供各種標準化的默認配置。使得我們可以快速開發Spring項目,免掉xml配置的麻煩。降低Spring項目的成本。

2. SpringBoot的優缺點

使編碼配置部署都變得很簡單。缺點可能就是自動注入的bean,不是特別清楚,有可能會衝突。

3. SpringBoot如何固定版本

一種是parenet的時候直接固定。

一種是通過dependcy來固定,因為可能當前項目已經有父項目。

 

4. SpringBoot的使用方式

maven中父項目導入Springboot的啟動器。然後編寫一個主程式打上SpringBootApplication註解。通過run方法就可以啟動。

5. SpringBoot自動配置原理

首先可以看到啟動類上面有一個SpringBootApplication註解,點進去之後,又EnableAutoConfiguration註解。然後再進去,發現有個@Import註解,其導入的是EnableAutoConfigurationImportSelector類。再看這個類,他是集成了一個抽象的AutoConfigutationimportSelector。再往上就是介面ImportSelector。然後如果實現了介面的selectImport介面就會將其中的返回的數組全部載入到Spring容器中。其中實現的最主要的地方是getCandidateConfigurations方法。那個方法內部實現就是回去讀取meta-inf下的spring.factories。所以主要在那裡面配置的類就都會被自動載入。

6. SpringBoot配置文件注入

 

注入實體類中,實體類可以使用@ConfigurationProperties(prefix = "person")註解。

 

7. @Value和@ConfigurationProperties比較

 

8. @PropertySource

載入指定的配置文件。如下,如果不聲明的話,將從主配置文件載入。

 

9. @ImportResource

導入Spring的配置文件,讓配置文件裡面的內容生效;這種方式比如一個類沒有使用@Componet註解註冊進容器,則使用自動裝配autowired找不到。引入文件後,即可找到。

Spring Boot裡面沒有Spring的配置文件,我們自己編寫的配置文件,也不能自動識別;

想讓Spring的配置文件生效,載入進來;@**ImportResource**標註在一個配置類上

 

10. springboot的profile載入

在配置文件的時候,我們可以建立多個。用-進行結尾。通過主配置文件,配置profiles的active就可以指定載入文件。

在同一個文件中,yml文件支援文檔塊的寫法,為---。

 

11. SpringBoot激活指定profile的幾種方式

第一種:直接在配置文件中通過active指定

第二種:通過java -jar 的參數指定

 

 

 

 

第三種:通過虛擬機參數

 

12. SpringBoot項目內部配置文件載入順序

順序如下;

 

 

 

 

 

優先順序由高到底,高優先順序的配置會覆蓋低優先順序的配置;

SpringBoot會從這四個位置全部載入主配置文件;**互補配置**;

我們還可以通過spring.config.location來改變默認的配置文件位置

項目打包好以後,我們可以使用命令行參數的形式,啟動項目的時候來指定配置文件的新位置;指定配置文件和默認載入的這些配置文件共同起作用形成互補配置;

 

13. SpringBoot外部配置文件載入順序

這個挺多的,我們就幾個重要的。

高優先順序的會覆蓋低優先順序的。

命令行上的參數配置是優先順序最高的。

jar包外的帶profile的配置文件。

jar包內的帶profile的配置文件。

jar包外的不帶profile的配置文件。

jar包內的不帶profile的配置文件。

14. Springboot日誌關係

SpringBoot默認使用的slf4j+logback。引入logging-starter就可以使用。能自動適配其他日誌。只需要將日誌裡面的commons-logging移除。就會自動引入其他日誌。

使用LoggerFactory可以獲得logger。通過logger就可以記錄日誌。

日誌的一些配置

logging.level.com.atguigu=trace  指定列印級別

logging.file=G:/springboot.log    指定日誌生成路徑

logging.path=/spring/log  指定日誌生成相對路徑

logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n 指定控制台輸出格式

logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== 指定文件中日誌輸出格式

15. SpringBoot如何擴展SpringMVC的配置

通過建立自己的類繼承WebMvcConfigurerAdapter,在類上面打上註解@Configuration。然後重寫裡面的方法即可。容器中的所有的WebMvcConfigurer會一起起作用。

 

如果我們不想使用mvc的自動配置,全部使用自己的。可以在配置類上增加註解@EnableWebMvc。這個註解可以導入一個webmvcconfigurationsupport的類。然後mvc的自動配置類上的註解有這麼一句話,有一個條件註解,當沒有上面那個類的時候,才生效。

16. SpringBoot如何註冊filter,servlet,listener

編寫好一個servlet後,聲明一個類,返回ServletRegistrationBean。通過裡面的方法將servlet包裝一下返回。

 

 

 

 

編寫一個filter。通過FilterRegister包裝。

 

 

 

 

編寫一個listener,實現註冊bean。

 

 

 

 

17. SpringBoot切換成undertow

先排除掉tomcat,然後再引入undertow就行了。

 

18. SpringBoot的任務

非同步任務在啟動類上,增加註解@EnableAsync,此時就開啟了。然後對於非同步的方法,打上註解@Async。

定時任務,在啟動類上,打上註解@EnableScheduling,需要定時的方法使用@Scheduled註解。這裡面分為秒,分,小時,日期,月份,星期。

 

郵件任務

引入郵件任務啟動器。在配置文件中進行配置。通過javamailsenderimpl來發送。可以發送簡單的郵件和複雜的郵件SimpleMailMessage和MimeMessage。

19. SpringBoot熱部署

jrebal是收費的。

一般使用springboot-dev-tool。通過ctrl+f9進行熱部署。開啟idea的自動編譯。

20. SpringBoot的監控

引入actuatro的監控器。配置文件需要配置安全關閉。management.security.enabled=false。可以配置endpoint的shutdown的enable開啟,就可以直接關閉了。

21. SpringBoot整合redis

引入redis的啟動器。data-redis。引入後再配置文件進行配置redis的host。然後通過redistemplate就可以進行操作了。會亂碼,默認使用的是jdk的序列化json器。需要改成jackson。自己實現一個RedisTmeplate。泛型為object,object。再實現CacheManager。就會發現快取變成json形式了。

 

 

Tags: