發表文章

目前顯示的是 2022的文章

輕探WebFlux

圖片
本來標題是想寫輕探春日流轉的,想想還是算了。 程式碼 在此 ,您可以先git clone下來備用。 Spring 5 後來始導入non-blocking IO、reactive backpressure的Web開發方式;僅管Spring官方稱WebFlux不會比Servlet快到哪去,但實際面臨到需要I/O的情況下,理論上總是會快一點,像用reactor netty抓網頁的方式,我感覺就是比Apache HttpClient來的快些。  轉到WebFlux首先要面臨的就是Servlet不再,沒了JSP,也沒了JSTL,一開始真的很難習慣,忽然發現一堆Listener沒得用,也沒辦法 Wrap Servlet Request,但為了或許能快那麼一點點,總是得付出些代價。  在學習的過程式,覺得困難點大概有三,分別是Web轉換、Secuity應用與WebSocket管控,我想就這幾點來說明如果克服(至於如何寫Reactive,不想在這裡多說, projectreactor.io 可以瞭解一下,網路也有一堆教學文件)。  首先要面臨的是 Web撰寫方式的轉換 : Spring boot 提供了一堆 spring-boot-starter-xxxx,可以很方便的開始一個專案,優點是快速,缺點是引用了一堆可能用不到的Libraries,我並不打算以此為進入點。 WebFlux在少了Container的情況下,註定以應用程式的方式存在,而應用程式的方式就是採用ApplicationContext去載入一些程式設定 ``` Main.java ``` 所以AppConfig.java就是設定的進入點,上述程式載入設定後,隨即就是啟動HttpServer。 ``` AppConfig.java ``` @Configuration不用多說,寫過Spring程式的人都應該知道 。 至於@ImportResource,嗯!我是念舊的人,習慣把設定放在XML內(從Ver 3開始養成的), applicationContext.xml 包含了Component Scan 與 thymeleaf (取代JSP)的一些設定。 AppConfig.java 依序載入了Web設定、資料庫設定、安全性設定與WebSocket設定。 WebConfig.java 包含了WebFlux運作的基