IDEA 搭建一個springboot2 webflux專案
最近考完PMP,研究了一套新東西,雖然之前的spring boot1 的專案還沒寫完,但是之後慢慢把東西遷移到這個專案吧。
同時也轉戰了IDEA,說實在的剛開始上手挺費勁的,不過用習慣了以後在迴歸到eclipse,操作一下頓卡一下,真是感覺藍瘦香菇。老婆也說:不能總待在eclipse的舒適區吧,所以決心用下去。也該跳出來見見世面了。哈哈。
1,簡單介紹一點springboot2 webflux
網上一搜有一堆介紹,我就不貼上了。說說我的簡單理解,webflux和webmvc是spring5支援的兩種訪問方式。MVC是基於之前的方式,進一個請求,處理後返回,屬於阻塞的,之前的容器是tomcat;而webflux是基於servlet3.1,可以進行非同步非阻塞的訪問。大大增加併發量,使在同樣的硬體基礎上,能比MVC方式允許更大的併發量。預設容器為netty。webflux和webmvc之間的區別從maven依賴就可以看得出來。
webfllux基於JDK8中的lambda表示式+JDK中的reactive stream(Flow API)響應式流,兩種結合而來。
lambda表示式之前也簡單寫過,附傳送門:lambda表示式
reactive stream 雖然也有stream,但是他跟lambda沒有關係,他是JDK9中一套基於釋出者和訂閱者的’一種模式。具體的等我研究透徹回來開個單獨的來寫。
webflux架構有兩種程式碼風格,一種是通過路由來轉發請求,寫起來跟MVC風格可以說完全不一樣了;但是spring也將他融入了原來mvc開發的方式,使我們用起來會比較順手。
還有一個問題就是目前的webflux暫時不支援mysql這類的關係型資料庫,所以先試著用nosql資料庫mongodb。
下面開始準備環境。JDK安裝,maven安裝等不贅述了。
2,下載安裝IDEA
這個不多說了,附上下載連結:
我用的社群版本,下面就以社群版本為例了。
3,配置IDEA
下載安裝之後應該會到這個介面:
這裡我們分幾步:
1,配置JDK
右下角,Configure——>Project Defaults——>Project Structure;或者直接使用快捷鍵:Ctrl+Shift+Alt+S
點選加號,選擇JDK,選擇JDK安裝目錄即可。
2,配置maven
右下角,Configure——>Settings——>右側找到build,Execution,Deployment——>Maven
按照這個配置即可。選擇maven路徑;然後配置你的settings.xml檔案;
3,配置lombok外掛
這個之前我寫了篇文章,裡面有介紹。不多說,附上傳送門。lombok的安裝與使用
4,配置springboot外掛
右下角,Configure——>Plugins,社群版本搜尋Spring Assistant,收費版好像是搜尋spring boot,我沒用有待求證。
點選Install,安裝。
先說這幾個,後面用到git,或者其他外掛配置,再說。
全部安裝完重啟之後,開始構建我們的springboot2專案。
4,建立專案
先說環境:
JDK10(11剛釋出,而且這是一個長期版本,所以之後可能會考慮換到JDK11)
maven3.5.0
springboot 版本2.0.5
過程比較簡單,多為截圖跟著走就行了。
這裡選擇和你之前選的JDK版本改成 一致。
選擇你要使用的依賴。在下面選擇路徑,完成即可。等待自動構建就行了。
‘
看一下pom.xml
<!-- 支援stream的mongodb 依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
<!--基於stream + fluxAPI 的 webflux依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
mongodb依賴帶有-reactive
原來的web依賴也換成了webflux依賴
這個時候,一個專案已經生成完畢。我們直接寫一個controller測試一下通不通即可。
程式碼:
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/test")
public Mono<String> test(){
return Mono.just("test wm");
}
}
啟動專案:
這裡發現,springboot2的預設容器已經有tomcat變成了支援非阻塞的netty。
結果:
這樣我們一個springboot2的webflux+mongodb專案就搭建完成了。可以看到這裡使用的還是MVC開發風格,只不過Mono沒見過,之後會介紹有關內容。webflux的路由後面的文章會有介紹。