一篇部落格帶你輕鬆應對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形式了。


