什麼是Springboot?
Springboot是微服務,是Spring開源組織下的子項目,是Spring組件一站式解決方案,主要簡化了Spring的難度,減省了繁重的配置,提供了各種啓動器,開發者能夠快速上手,即"開箱即用"。
爲什麼要用Springboot?
優點很多,例如,獨立運行,簡化配置,自動配置,無代碼生成和XML配置,應用監控,上手容易………………
Springboot的優點
1. 減少開發,測試時間和努力
2. 使用javaConfig有助於避免使用XML
(⚠️Spring javaConfig是Spring社區的產品,它提供了配置SpringIOC容器的純java方法,因爲它有助於避免使用XML配置)
3. 避免大量的maven導入和各種版本的衝突
4. 提供意見發展方法
5. 通過提供默認值快速開發
6. 沒有單獨的web服務器需要,意味着不再需要啓動tomcat,glassfish或其他東西
7. 需要更少的配置,因爲沒有web.xml文件。只需添加用@Configuration註釋的類,然後添加用@Bean註釋的方法,Spring將自動加載對象並像以前一樣對其進行管理。
Springboot最大優勢
Springboot最大優勢是"約定優於配置",是一種軟件設計範式,開發人員按照約定的方式去進行編程,可以減少開發人員需做決定的數量,獲得簡單的好處,而又不失靈活。
Spring Boot Starter和Spring JPA都是"約定優於配置",Spring Boot Starter在啓動的過程中會根據約定的信息對資源進行初始化,Spring Boot JPA 通過約定的方式來自動生成sql,避免大量無效代碼的編寫。
Springboot的核心配置文件有哪些?
Springboot的核心配置文件是application和bootstrap配置文件。
application配置文件主要用於Springboot項目的自動化配置;
bootstrap配置文件用於以下應用場景:
1. 使用Spring cloud config 配置中心時,這時需要在bootstrap配置文件中添加連接到配置中心的配置屬性來加載外部配置中心的配置信息;
2. 一些固定的不能被覆蓋的屬性
3. 一些加密/解密的場景。
配置文件的格式有:.preperties 和.yml兩種,寫法一樣,格式不同
.properties文件,舉例:
app.user.name = zhangsan
.yml文件,舉例:
app:
user:
name: zhangsan
Springboot的核心註解有哪些?
@SpringBootApplication:它是啓動類的註解,主要包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三個註解
- @SpringBootConfiguration:組合了@Configuration註解,實現配置文件功能;
- @EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項;
- @ComponentScan:Spring組件掃描。
開啓Springboot特性的方式有?
1. 繼承spring-boot-startr-parent項目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
2. 導入spring-boot-dependencies項目依賴
<dependencyManagement>
<dependencies>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.6.RELEASE</version>
<type>Pom</type>
<scope>import</scope>
</dependencies>
</dependencyManagement>
Springboot需要獨立的容器運行嘛?
可以不需要,因爲內置了Tomcat/Jetty等容器。
運行Springboot的方式有:
1. 打包用命令或者放到容器中運行。
2. 用maven/Gradle插件運行
3. 直接執行main方法運行
Springboot自動配置原理是什麼?
SpringBoot的自動配置註解是@EnableAutoConfiguration,這個註解方法會加載類路徑及所有jar包下META-INF/spring。factories配置中映射的自動配置的類。
@Configuration,@ConditionalOnClass是自動配置的核心,首先它是一個配置文件,其次根據類路徑下是否有這個類去自動配置。
實操瞭解下自動配置怎麼玩:
添加一個配置類:
public class EnvConfig implements EnvironmentAware{
private Environment env;
public String getStringValue(String key){
return env.getProperty(key);
}
public void setEnvironment(Environment env){
this.env = environment;
}
}
添加自動配置類:
@Configuration
@ConditionalOnClass(PropertyResolver.class)
public class EnvAutoConfig{
return new EnvConfig();
}
創建META-INF/spring.factories文件,添加自動配置映射:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\com.oceanpayment.common.config.env.EnvAutoConfig
這樣就搞定了。
Springboot中的Starters是什麼?
Starters可以看成是啓動器,包含了一系列可以繼承到應用裏面的依賴包,可以一站式集成Spring及其他技術,不需要到處找示例代碼和依賴包。
例如,想要使用Spring JPA訪問數據庫,只需要在pom.xml裏面加入spring-boot-starter-data-jpa啓動器依賴就可以使用了。
Starters包含了許多項目中需要用到的依賴,它們能夠快速持續的運行,都是一系列得到支持的管理傳遞性依賴。
Springboot官方的啓動器都是以spring-boot-starter-命名的,代表了一個特定的應用類型,第三方的啓動器不能以spring-boot開頭命名,它們都被Springboot官方保留。一般一個第三方的應該這樣命名,像myBatics的myBatics-spring-boot-starter。
Starters分類:
1. SpringBoot應用類啓動器
- spring-boot-starter:包含自動配置,日誌,YAML的支持
- spring-boot-starter-web:使用SpringMVC構建web工程,包含restful,默認使用tomcat容器
- ………………
2. SpringBoot生產啓動器
- spring-boot-starter-actuator:提供生產環境特性,能監控管理應用。
3. SpringBoot技術類啓動器
- spring-boot-starter-json:提供對JSON的讀寫支持
- spring-boot-starter-logging:默認的日誌啓動器,默認使用Logback
4. 其他第三方啓動器
如何在Springboot啓動的時候運行一些特定的代碼?
可以實現接口ApplicationRunner或者CommandLineRunner,這兩個接口實現方式一樣,都只提供了一個run方法。
ApplicationRunner:啓動獲取應用啓動時候的參數
public interface ApplicationRunner{
void run(ApplicationArguments args) throws Exception;
}
CommandLineRunner:啓動獲取命令行參數
public interface CommandLineRunner{
void run(String... args) throws Exception;
}
使用方式:
//第一種
@Component
public class MyBean implements CommandLineRunner{
public void run(String... args){
//do something.....
}
}
//第二種
@Bean
public CommandLineRunner init(){
return (String... strings)->{};
}
Springboot有哪幾種讀取配置的方式?
Springboot可以通過@PropertySource,@Value,@Environment,@ConfigurationProperties來綁定變量
Springboot支持哪些日誌框架?推薦和默認的日誌框架是哪個?
Springboot支持Java Util Logging, Log4j2, Lockback作爲日誌框架,如果使用Starters啓動器,Springboot將使用Logback作爲默認的日誌框架。
Springboot實現熱部署有哪幾種方式?
主要有兩種方式:
1. SpringLoaded
2. Spring-boot-devtools
Springboot實現代碼熱部署是一件很簡單的事情,代碼的修改可以自動部署並重新熱啓動項目
引入devtools依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
Springboot兼容老Spring項目嗎?
可以兼容,使用@ImportResource註解導入老Spring項目配置文件。
保護Springboot應用有哪些方法?
1. 在生產中使用https
2. 使用snyk檢查你的依賴關係
3. 升級到最新版本
4. 啓用CSRF保護
(⚠️CSRF代表跨站請求僞造。這時一種攻擊,迫使最終用戶在當前通過身份驗證的web應用程序上執行不需要的操作。CSRF攻擊專門針對狀態改變請求,而不是數據竊取,因爲攻擊者無法查看對僞造請求的響應。)
5. 使用內容安全策略防止XSS攻擊
…………
SpringBoot 2.X有什麼新特性?與1.X有什麼區別?
1. 配置變更
2. JDK版本升級
3. 第三方類庫升級
4. 響應式Spring編程支持
5. Http/2支持
6. 配置屬性綁定
7. 更多改進與加強
Springboot和Spring,SpringMVC的區別?
Spring和SpringMVC的問題在於需要配置的量的參數,而Springboot通過一個自動配置和啓動的項來解決這個問題,這樣就可以更好的更快速的構建產品就緒應用程序。
SpringBoot項目創建方式:
1. 登陸Spring Initializr創建
2. 設置一個maven項目並添加正確的依賴項來開始一個項目
Springboot的四大特性
1. Starter添加項目依賴
2. bean的自動化配置
Springboot會考慮應用中的其他因素並推斷你所需要的Spring配置。例如在A類中有一個成員變量是在jar包中的B類,如果是普通的Springmvc模式,那麼需要在xml中定義B類的一個bean對象,然後纔可以在A類中使用@Autowired註解在注入此bean。但是在Springboot中默認啓動了自動配置,在需要B類的時候可以生層B的bean對象並且注入到A中,不需要在xml做任何的配置,如果想要禁用自動配置,就將spring.boot.enableautoconfiguration的值設置爲false。
3.Springboot CLI與Groovy的高效配合
Springboot CLI充分利用了Springboot Starter和自動配置的魔力,並添加了一些groovy的功能,簡化了Spring的開發流程,通過CLI,我們能過運行一個或多個groovy腳本,並查看它們是如何運行的,在應用運行的過程中,CLI能夠自動導入Spring類型並解析依賴。
4. Springboot Actuator