一、新建項目示例使用IDEA快速創建基於SpringBoot的工程。springboot 2.3.1java 8WebFlux 必須選用Reactive的庫POM 依賴 org.springframework.boot spring-boot-starter-webflux 二、Controller... ...
一、新建項目
示例使用IDEA快速創建基於SpringBoot的工程。
springboot 2.3.1
java 8
WebFlux 必須選用Reactive的庫
POM 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
二、Controller
WebFlux 的Controller 可以沿用SpringMVC 的方式,但是返回結果需要使用Mono或者Flux。
創建一個介面,返回http狀態碼
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* test
*
* @author opal
* @since 2020-07-17 10:04
*/
@RestController
@RequestMapping("/test")
public class TestController {
volatile int count502 = 0;
volatile int count200 = 0;
/**
* 返回502狀態
* @author opal
* @since 2020-07-17 10:04
*/
@GetMapping("/status502")
public Mono<String> status502(ServerWebExchange exchange){
count502++;
String msg = "這是502頁面,第"+ count502 +"次訪問";
exchange.getResponse().setStatusCode(HttpStatus.BAD_GATEWAY);
System.out.println(msg);
return Mono.just(msg);
}
/**
* 返回200狀態
* @author opal
* @since 2020-07-17 10:04
*/
@GetMapping("/status200")
public Flux<String> status200(){
count200++;
String msg = "這是200頁面,第"+ count200 +"次訪問";
System.out.println(msg);
return Flux.just("這是200頁面", ", 第"+ count200 +"次訪問");
}
}
跑起來測試一下:
結語
WebFlux 應用中,所有數據都應該以Mono、Flux的形式表示,這樣才能帶來最好的性能和高吞吐量,Mono和Flux 這兩種數據模型是WebFlux的核心。
WebFulx要學好,需要掌握Reactor(Mono、Flux), 這跟stream很像,建議學習一下stream。