SpringBoot 是 Spring 開源組織下的子項(xiàng)目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重XML的配置,提供了各種啟動器,在運(yùn)行過程中自定配置, 開發(fā)者能快速上手。它的優(yōu)勢是獨(dú)立運(yùn)行、 簡化配置、自動配置 、無代碼生成和XML配置, 無需部署war文件。
-快速創(chuàng)建獨(dú)立運(yùn)行的spring項(xiàng)目與主流框架集成
-使用嵌入式的servlet容器,應(yīng)用無需打包成war包
-starters自動依賴與版本控制
-大量的自動配置,簡化開發(fā),也可修改默認(rèn)值
-準(zhǔn)生產(chǎn)環(huán)境的運(yùn)行應(yīng)用監(jiān)控
-與云計算的天然集成
SpringBoot 可以通過 @PropertySource,@Value,@Environment, @ConfigurationProperties 來綁定變量。
YAML是一種人類可讀的數(shù)據(jù)序列化語言。它通常用于配置文件。與屬性文件相比,如果我們想要在配置文件中添加復(fù)雜的屬性,YAML文件就更加結(jié)構(gòu)化,而且更少混淆。可以看出YAML具有分層配置數(shù)據(jù)。
.properties和.yml,它們的區(qū)別主要是書寫格式不同。yml采取的是縮進(jìn)的格式 不支持@PerpertySource注解導(dǎo)入配置。
SpringBoot配置加載順序優(yōu)先級是:propertiese文件、YAML文件、系統(tǒng)環(huán)境變量、命令行參數(shù)。
@SpringBootApplication是Spring Boot的核心注解
主要組合包含了以下3個注解:
1@SpringBootConfiguration: 組合了@Configuration 注解,實(shí)現(xiàn)配置文件的功能。
2@EnableAutoConfiguration: 打開自動配置的功能,也可以關(guān)閉某個自動配置的選項(xiàng),如關(guān)閉數(shù)據(jù)源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
3@ComponentScan: Spring組件掃描
1)打包用命令或者放到容器中運(yùn)行
2)用 Maven/ Gradle 插件運(yùn)行
3)直接執(zhí)行 main 方法運(yùn)行
方式一:點(diǎn)擊idea中pacakage插件,war包生成在target文件夾下
方式二:命令方式,通過輸入maven打包命令mvn package 即可打war包成功,war包生成在target文件夾下!
添加如下文件,其中dev是開發(fā)環(huán)境,test是測試環(huán)境,prod是生產(chǎn)環(huán)境
application-dev.properties
application-test.properties
application-prod.properties
Spring Loaded和Spring-boot-devtools
可以兼容,使用 @ImportResource 注解導(dǎo)入老 Spring 項(xiàng)目配置文件。
1)添加MyBatis的starter maven依賴org.mybatis.spring.boot.mybatis-spring-boot-starter.jar;
2)在MyBatis的接口中 添加@Mapper注解;
3)在application.yml配置數(shù)據(jù)源信息;
跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以發(fā)送 GET 請求,無法發(fā)送其他類型的請求,在 RESTful 風(fēng)格的應(yīng)用中,就顯得非常雞肋,因此我們推薦在后端通過 (CORS,Cross-origin resource sharing) 來解決跨域問題。這種解決方案并非 SpringBoot 特有的,在傳統(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);
}
可以實(shí)現(xiàn)接口 ApplicationRunner 或者 CommandLineRunner,這兩個接口實(shí)現(xiàn)方式一樣,它們都只提供了一個 run 方法。
Starters可以理解為啟動器,它包含了一系列可以集成到應(yīng)用里面的依賴包,你可以一站式集成Spring及其他技術(shù),而不需要到處找示例代碼和依賴包。如你想使用SpringJPA訪問數(shù)據(jù)庫,只要加入 spring-boot-starter-data-jpa 啟動器依賴就能使用了。
在Spring 和 SpringMVC 中需要配置大量的參數(shù)。Spring Boot 提供了配置應(yīng)用程序和框架所需要的基本配置。這就是自動配置。
SpringBoot啟動的時候會通過@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自動配置類,并對其進(jìn)行加載,而這些自動配置類都是以AutoConfiguration結(jié)尾來命名的,它實(shí)際上就是一個JavaConfig形式的Spring容器配置類,它能通過以Properties結(jié)尾命名的類中取得在全局配置文件中配置的屬性如:server.port,而XxxxProperties類是通過@ConfigurationProperties注解與全局配置文件中對應(yīng)的屬性進(jìn)行綁定的。
SpringBoot 支持 Java Util Logging, Log4j2, Lockback 作為日志框架,如果你使用 Starters 啟動器,Spring Boot 將使用 Logback 作為默認(rèn)日志框架,SpringBoot支持Java Util Logging,Log4j2,Lockback作為日志框架,如果你使用starters啟動器,SpringBoot將使用Logback作為默認(rèn)日志框架。無論使用哪種日志框架,Spring Boot都支持配置將日志輸出到控制臺或者文件中。
spring-boot-starter啟動器包含spring-boot-starter-logging啟動器并集成了slf4j日志抽象及Logback日志框架。
Spring boot actuator是spring啟動框架中的重要功能之一。Spring boot監(jiān)視器可幫助您訪問生產(chǎn)環(huán)境中正在運(yùn)行的應(yīng)用程序的當(dāng)前狀態(tài)。有幾個指標(biāo)必須在生產(chǎn)環(huán)境中進(jìn)行檢查和監(jiān)控。即使一些外部應(yīng)用程序可能正在使用這些服務(wù)來向相關(guān)人員觸發(fā)警報消息。監(jiān)視器模塊公開了一組可直接作為HTTP URL訪問的REST端點(diǎn)來檢查狀態(tài)。
默認(rèn)情況下,所有敏感的 HTTP 端點(diǎn)都是安全的,只有具有 ACTUATOR 角色的用戶才能訪問它們。
安全性是使用標(biāo)準(zhǔn)的 HttpServletRequest.isUserInRole 方法實(shí)施的,可以用來禁用安全性。
只有在執(zhí)行機(jī)構(gòu)端點(diǎn)在防火墻后訪問時,才建議禁用安全性。
Spring 通過使用 @ControllerAdvice 注解處理異常,實(shí)現(xiàn)一個ControllerAdvice 類來處理控制器類拋出的所有異常。
1.在生產(chǎn)中使用HTTPS
2.使用Snyk檢查你的依賴關(guān)系
3.升級到最新版本
4.啟用CSRF保護(hù)
5.使用內(nèi)容安全策略防止XSS攻擊
1.配置變更
2.JDK 版本升級
3.第三方類庫升級
4.響應(yīng)式 Spring 編程支持
5.HTTP/2 支持
6.配置屬性綁定