成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這會(huì)是下一代的 Java 程序員的技術(shù)棧嗎?

開(kāi)發(fā) 項(xiàng)目管理
阿粉這里給出的建議就是,如果當(dāng)下的項(xiàng)目就是 ??SpringMVC?? 的,那么不要想著換成 ??Spring WebFlux?? 架構(gòu),因?yàn)闆](méi)必要,如果說(shuō)要新開(kāi)發(fā)一個(gè)項(xiàng)目,需要高吞吐量而且底層也不依賴事務(wù)性數(shù)據(jù)庫(kù)的話,那么可以嘗試使用一下 ??Spring WebFlux??。

前面的文章給大家介紹了 SpringBoot 的應(yīng)用 web 類型推斷,并且結(jié)合了 Reactive web 類型給大家分析了一下 SpringBoot 是如何進(jìn)行 web 類型推斷和創(chuàng)建內(nèi)置 web 服務(wù)器的。

有小伙伴在后臺(tái)留言就問(wèn)了 Servlet web 我們天天使用很熟悉,那什么是 Reactive web 呢??jī)烧叩膮^(qū)別是啥?今天阿粉就給大家介紹一下。

Servlet 與 Reactive 技術(shù)棧

打開(kāi) Spring 的官方文檔我們?cè)?nbsp;Reactive 一欄中可以看到下面的架構(gòu)圖,其中可以很明顯的看到 Reactive 的技術(shù)棧跟 Servlet 技術(shù)棧是完全并行的。意思是說(shuō)我們?nèi)粘i_(kāi)發(fā)的 Servlet web 類型只是一半的內(nèi)容,還有另外一半世界就是 Reactive,兩者對(duì)應(yīng)的依賴如下所示。

<!--Servlet web 依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Reactive web 依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

圖片

servlet-reactive

通過(guò)架構(gòu)圖我們可以知道常用的 Servlet web 就是我們經(jīng)常說(shuō)的 Spring MVC,底層的技術(shù)棧支持 JDBC 等,而 Reactive web 就是 Spring WebFlux 底層的持久層支持 Mongo 等但是不支持 JDBC。

什么是 Spring WebFlux

由上圖我們看到 Spring WebFlux 是一個(gè)異步非阻塞式的 Web 框架,它能夠充分利用多核 CPU 的硬件資源去處理大量的并發(fā)請(qǐng)求。相對(duì)于 Spring MVC 來(lái)說(shuō)的話,Spring MVC 構(gòu)建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型。

由于 Spring WebFlux 底層是使用響應(yīng)式編程,基于事件的異步驅(qū)動(dòng),所以可以在很大程度上提升系統(tǒng)的吞吐量。但是要知道這并不會(huì)縮短請(qǐng)求的響應(yīng)時(shí)間,只是提升吞吐量。

而且根據(jù)上面的架構(gòu)圖我們可以發(fā)現(xiàn),Spring WebFlux 底層的持久層是不支持 JDBC 的,也就是說(shuō)不支持 MySQL 等事務(wù)性數(shù)據(jù)庫(kù),

舉個(gè)栗子

前面說(shuō)了這么多那 Spring WebFlux 到底是怎么開(kāi)發(fā)的呢?下來(lái)通過(guò)一個(gè)簡(jiǎn)單的 case 來(lái)給大家演示一下。在演示之前通過(guò)官方文檔我們可以發(fā)現(xiàn),Spring WebFlux 和 Spring MVC 是可以共用很多組件的,比如 @Controller,Tomcat 等,但是也會(huì)存在很多差異。

Spring 官方 Reactive 地址為:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html

圖片

springmvc-springwebflux

基于我們之前的 demo-reactive 項(xiàng)目的代碼,或者小伙伴也可以在 starter.spring.io 上面下載一個(gè) SpringBoot 的項(xiàng)目代碼,增加上 spring-boot-starter-webflux 依賴即可。

定義 DTO

package com.example.reactive.demoreactive.dto;

public class User {
private String name;
private int age;

//省略 getter setter
}

定義 Controller

package com.example.reactive.demoreactive.controller;

import com.example.reactive.demoreactive.dto.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.ArrayList;
import java.util.List;


@RestController
public class UserController {

@GetMapping("/hello")
public String sayHello(){
return "hello";
}

@GetMapping("/user/get")
public Mono<User> getUser(){
User user = new User();
user.setName("Java極客技術(shù)");
user.setAge(18);
return Mono.just(user);
}

@GetMapping("/user/list")
public Flux<List<User>> getAllUser() {
User user = new User();
user.setName("Java極客技術(shù)");
user.setAge(18);
List<User> list = new ArrayList<>();
list.add(user);
return Flux.just(list);
}
}

隨后啟動(dòng)我們的服務(wù),再通過(guò)瀏覽器訪問(wèn)我們的接口就可以了。

圖片

上面三個(gè)接口的訪問(wèn)結(jié)果如下:

圖片

hello

圖片

user-get

圖片

user-list

可以看到我們?cè)跒g覽器可以正常獲取到數(shù)據(jù),上面的代碼跟我們平時(shí)寫 SpringMVC 的代碼很相似,不太一樣的地方是有兩個(gè)類 Mono 和 FLux。

關(guān)于 Mono 和 Flux 是反應(yīng)式編程的概念,Mono 是返回 0 或 1 個(gè)元素,F(xiàn)lux 是返回 0 - N 個(gè)元素,更詳細(xì)的內(nèi)容大家可以通過(guò)官方文檔 https://projectreactor.io/docs/core/release/api/  來(lái)查看。

總結(jié)

雖然從上面的寫法來(lái)看,Spring WebFlux 的寫法與 SpringMVC 的寫法沒(méi)有很大的區(qū)別,但是兩者的底層機(jī)制是完全不一樣的,而且技術(shù)棧也不完全相同,所以大家在日常技術(shù)選型的時(shí)候需要根據(jù)實(shí)際情況去選擇。

阿粉這里給出的建議就是,如果當(dāng)下的項(xiàng)目就是 SpringMVC 的,那么不要想著換成 Spring WebFlux 架構(gòu),因?yàn)闆](méi)必要,如果說(shuō)要新開(kāi)發(fā)一個(gè)項(xiàng)目,需要高吞吐量而且底層也不依賴事務(wù)性數(shù)據(jù)庫(kù)的話,那么可以嘗試使用一下 Spring WebFlux。

責(zé)任編輯:武曉燕 來(lái)源: Java極客技術(shù)
相關(guān)推薦

2020-03-12 18:12:10

Google FuchAndroid移動(dòng)應(yīng)用

2013-05-07 10:07:38

程序員

2013-05-06 11:03:14

程序員

2020-11-13 19:02:36

Jamstack技術(shù)棧網(wǎng)站

2013-07-27 21:28:44

2010-09-01 17:05:04

無(wú)線網(wǎng)絡(luò)

2013-06-27 11:21:17

2009-03-17 09:37:00

DSL技術(shù)TDDEDSL

2010-03-18 09:15:11

多核下一代IT

2009-05-25 08:31:36

iPhone蘋果移動(dòng)OS

2018-09-27 18:47:45

AIOpsDevOps

2014-12-01 17:20:20

2015-11-04 17:56:35

2020-06-02 08:05:28

智能電表蜂窩物聯(lián)網(wǎng)NB-IoT

2018-09-11 08:00:00

DevOpsAIOps機(jī)器學(xué)習(xí)

2024-02-26 14:46:53

移動(dòng)計(jì)算人工智能5G

2009-10-29 17:05:57

無(wú)線接入技術(shù)

2021-03-02 14:01:33

人工智能深度學(xué)習(xí)

2011-01-27 09:52:43

StuxnetZeus軟件攻擊

2015-01-22 16:16:01

思科IT模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品一区二区在线观看 | a级大片免费观看 | www国产成人免费观看视频,深夜成人网 | 成人在线播放 | 91av视频在线播放 | 国产亚洲精品综合一区 | 欧美午夜一区 | 日本一区二区不卡 | 黄色一级大片在线免费看产 | 一区二区在线 | 欧美精品黄| 日韩精品一区二区三区视频播放 | 国产欧美日韩一区 | www狠狠爱com| 日日夜夜视频 | 在线观看黄色大片 | 成人在线免费观看 | 99国产精品久久久 | 亚洲国产精品99久久久久久久久 | 91免费在线看 | 国产专区在线 | 久久婷婷av| 亚洲一二三视频 | 日韩精品久久 | 一区二区精品 | 亚洲高清成人在线 | 日韩一区二区三区在线观看 | 婷婷五月色综合 | 国产高清精品一区二区三区 | 亚洲精品视频在线观看免费 | 亚洲狠狠爱| 国产精品一区二区三 | 午夜播放器在线观看 | 欧美日韩一区二区三区不卡视频 | 日韩中文字幕 | 欧洲视频一区 | 国产精品免费一区二区三区四区 | 91精品在线看 | 成人免费视频网站在线看 | 最近日韩中文字幕 | 久久九九影视 |