建立一個SpringBoot專案
通過Spring Initializr來建立專案
- 第一步
- 然後點選Generate Project之後就可以生成專案並且下載下來。
- 解壓下載後的專案,然後開啟IDEA->File->Open選擇專案的pom進行開啟。
- 這樣子一個最簡單的SpringBoot專案就搭建成功了。
通過Maven命令來建立SpringBoot專案
- 配置好Maven的系統路徑.
- 然後使用命令
mvn archetype:generate -DinteractiveMode=false -DgroupId=cn.koali -DartifactId=springboot_demo -Dversion=1.0.0-SNAPSHOT
複製程式碼
各個引數的含義參考官網 3.
建立成功,會提示專案生成的地址。4. 然後同理使用IDEA開啟剛剛命令列生成的專案。 5. 接下來開啟SpringBoot簡單教程 找到Build with Maven複製依賴等等即可。
通過IDEA來建立SpringBoot專案.
- 開啟IDEA,然後File->new Project. 填寫相應的Group,Artifact,然後選擇需要的依賴即可以。
使用Spring5.0的web Flux
Web Flux是什麼?
- Spring WebFlux是非同步,非阻塞的。
- WebFlux有Mono,Flux兩種集合型別。
- Mono是0->1集合型別,比如Mono。
- Flux是1->n集合型別,比如Flux<List>
- Mono,Flux都是非同步處理的,而集合物件基本上是同步的。
Web Flux(Netty)跟Web MVC(Servlet)有什麼區別?
- Web Flux支援Java 8 lamba表示式。
- Web MVC是同步阻塞的IO模型,而Web Flux是非同步非阻塞的IO模型。
Web Flux(Netty)跟Web MVC(Servlet)優缺點?
- Web Flux的效率(qps)比Web MVC高。
- Web Flux的程式設計難度高,維護成本高,對於切面等不好編寫。
Web Flux實踐
@Configuration
public class RouterFunctionConfiguration {
@Bean
public RouterFunction<ServerResponse> webFlux() {
return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> {
Mono<String> str = Mono.just("Hello World").delayElement(Duration.ofMillis(10));
return ServerResponse.ok().body(str, String.class);
});
}
}
複製程式碼
與Web MVC類似。我們宣告我們的路由類為 @Configuration,然後初始化一個Bean。 在Web Flux請求的介面是RequestServer,響應的介面是ResponseServer。 其中RouterFunction提供了route,通過在route這個方法我們設定RequestPredicates 的路由行為,從而達到接受請求。
驗證Web Flux和Web MVC哪個效率高
- 首先寫兩個API,一個使用Web Flux,一個使用Web MVC,然後阻塞10秒,假裝使用者思考了10秒。
//web mvc
@GetMapping("/webServlet")
public String webServlet(){
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
return "Error during thread sleep";
}
return "Hello World";
}
//web flux
@Bean
public RouterFunction<ServerResponse> webFlux() {
return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> {
Mono<String> str = Mono.just("Hello World").delayElement(Duration.ofMillis(10));
return ServerResponse.ok().body(str, String.class);
});
}
複製程式碼
- 然後開啟Jmeter 假設有1000個使用者,迴圈10次的發起請求。 JMeter分別填寫請求的路徑 web Flux耗時10秒左右,而且請求不會被拒絕。 web MVC耗時21秒左右,請求多數被拒絕。