搜尋

搜尋結果

Spring Web 異步 Api
科技新知
MacauYeah・2025-10-18

在設計網頁應用時,總會有某些功能,是特別消耗時間的,例如我們的應用要提供報表,或長時間搜索。如果,我們的 Web Api 的連結,要強制客戶端等待結果,那麼中途斷線需要重做的機會就變得很高,客戶端的體驗一定不太好。 面對這些情況,我們最好就把原本一個 API 功能分為三個 API 去做。 工作生成 API 查詢狀態 API 查詢結果 API 如果大家有信心,可以把2和3混合在一起,對於客戶端,也是一件好事。不過,2,3 因為回傳的結構可能不一樣,分開處理,程式碼會更易讀。 以下,筆者就以一個模擬報表生成的應用,去解釋如何設計可以即時回傳的 API。 source code springbootwebapiasync ReportController.java 詳細解析 假設我們有一個 ReportController,它負責處理與報告生成相關的 HTTP 請求,它提供三個核心 API 端點。 啟動報告生成端點 @PostMappingquot;reportJobcreatequot; public ResponseEntity createJob String uuid = String.formatquot;%d_%squot;, new Date.getTime, UUID.randomUUID.toString; CompletableFuture.runAsync gt; try orderStatus.putuuid, PROCESSING; Thread.sleep10000; 10second simulated delay reportService.genAndSaveReportuuid; orderStatus.putuuid, COMPLETED; catch InterruptedException e Thread.currentThread.interrupt; ; return ResponseEntity .accepted .headerHttpHeaders.LOCATION, quot;reportJobstatusquot; uuid .bodyMap.ofquot;uuidquot;, uuid, quot;status apiquot;, quot;apireportJobstatusquot; uuid, quot;download apiquot;, quot;apireportJobdownloadquot; uuid; 運作原理: 立即生成唯一的 uuid 來標識這次任務 在 CompletableFuture.runAsync 運行長時間的操作。 API 本身即時回傳了 HTTP 202 Accepted 狀態,告訴客戶端請求已被接受但尚未完成 在回傳的結果中,還有提示可以查詢狀態和查詢結果的API。 這種設計避免了 HTTP Gateway Timeout,因為回應是即時的 。 檢查進度端點 @GetMappingquot;reportJobstatusuuidquot; public ResponseEntity getStatus@PathVariablequot;uuidquot; String uuid String status = orderStatus.getuuid; if status == null return ResponseEntity.notFound.build; if COMPLETED.equalsstatus return ResponseEntity.statusHttpStatus.SEE_OTHER return ResponseEntity.ok .headerHttpHeaders.LOCATION, quot;apireportJobdownloadquot; uuid .bodyMap.ofquot;statusquot;, COMPLETED; return ResponseEntity.statusHttpStatus.ACCEPTED .bodyMap.ofquot;statusquot;, PROCESSING; 單純以 map orderStatus.getuuid 查看狀態結果。這個map 必需是多線程下使用還是安全的 ConcurrentHashMap。 下載結果端點 @GetMappingquot;reportJobdownloaduuidquot; public ResponseEntity download@PathVariablequot;uuidquot; String uuid String status = orderStatus.getuuid; if status == null COMPLETED.equalsstatus return ResponseEntity.notFound.build; else 下載檔案 如果大家並不計較是否需要重做失敗的請求,這個例子已經可以簡單地達到即時異步回傳的效果。如果大家還需求考慮請求是否有效完成,就需要用到 message queue 或其他 job server ,這就不是同一個網頁應用的操作範圍。 Reference source code springbootwebapiasync Building a LongRunning Async REST API in Spring Boot with 202 303 Status Codes

《西班牙》你要知的五款傳統美食
走遍世界
行走世界記錄・2019-01-17

說起西班牙美食,相信很多人會迅速回答: 『我知道,黑毛豬火腿。』 『我知道,西班牙海鮮飯。』 的而且確,當走進西班牙各大小城市時,打開菜牌的第一頁,出現眼前的菜餚名稱往往是Jamon,即是西班牙黑毛豬火腿。 曾經在馬德里,一進餐廳,擡頭便看到酒吧上方整齊的吊掛著一排又一排的風乾火腿。對於遊客的我,還是頭一次看到這個景像,心裡暗叫:quot;太神奇了吧!這麼珍貴的伊比利亞半島火腿就這樣的隨便吊掛的嗎?quot; 地道的西班牙人卻習以為常,在一排排的火腿下輕鬆飲酒。 另一個為人熟悉的是Paella,即西班牙海鮮飯,有一次在巴塞羅那的餐廳,服務員熱情的介紹了一款墨魚汁做的海鮮飯,才讓我知道西班牙海鮮飯可以使用不同的食材來烹調的,當海鮮飯端上來的時候,給黑黑的外觀嚇了一跳,鼓起勇氣吃了一口,其實味道也不錯。 後來,漸漸發現除了西班牙全國性的菜式之外,亦會有一些限定美食只能在某一特定城市才可品嚐得到的。 如果你有興趣去一趟西班牙的話,以下五款美食你一定要知道。 1. 西班牙油條 Churros 中國人的早餐是白粥配油條,而西班牙呢?Churros 長得就像我們的油條,有些人把它翻譯作quot;吉拿棒quot;,是西班牙的傳統早餐,食法很簡單,就是quot;吉拿棒quot;配上一杯熱騰騰的巧克力便成。對西方人來說,早餐食巧克力據說能提升工作效率,但這並不符合中國人的飲食習慣,因此當我們到西班牙遊玩的時間,其實也可以調到下午茶時才對服務員說 來一客quot;Churros con Chocolatequot;。 這款功克力配油條也挺普遍,不論是馬德里或巴塞羅那等城市,也可找到它的蹤影。 2. 塔帕斯 Tapas 塔帕斯是西班牙飲食中重要的一部分,就是各種精致的小吃,通常作為下酒菜,搭配啤酒,葡萄酒或蘋果酒 。 如果翻查西語字典,會發現Tapas 在西文裡其實是『蓋子』的意思,為甚麽變成小吃的統稱呢?這個便要說說塔帕斯的來源,才會仿然大悟呢! 有說是古時還沒有酒杯蓋時,由於酒的果香經常招引蚊蟲,為免蚊蟲掉入酒裡,便把一片小麵包蓋在酒杯上,後來又在小麵包上放一些小點心,久而久之就成為Tapas。 隨著時間的過去,Tapas已不再是隨意放在酒杯上的一個蓋子,而是通行全國的一種料理風格,Tapas酒吧亦蜂湧而出,形成塔帕斯的飲食文化潮流。 做個地道西班牙人,在小酒館點一客塔帕斯,嚐一口紅酒或啤酒,看一場球賽,融入當地的文化中。 3. 茵賽瑪達 Ensaimada 茵賽瑪達是一款螺旋形的麵包,撒上白白的糖粉,吃起來甜甜的鬆軟的。 從17世紀到現在,茵賽瑪達足有五百年的歷史,最初麵包是使用豬油製作的,後來才改為牛油。這款傳統食品看起來很普通,但製作其實一點也不簡單,麵團必須使用適度的力度,反覆搓揉多次,才做出Ensainada應有的鬆軟口感,所以需要一整天的時間去製作有品質的茵賽瑪達。 初次嘗到這款美食是在蕭邦小鎮法德摩亞,經地道的西班牙人介紹才認識到茵賽瑪達。 注意啊!在西班牙全國範圍內,只有馬略卡群島才可找到茵賽瑪達的影蹤呢! 如果對這款傳統美食一試難忘的話,在馬略卡的機場內有一家百年老店,專門出售茵賽瑪達的,我也受不住quot;限定食品quot;的誘惑,買了兩大個回馬德里與朋友分享呢! 4. 燉牛尾 Rabo de Toro 趁著週末跑到西班牙南部古城哥多華,在舊城區內找到一家米其林推薦的餐廳,嚐過西班牙傳統燉牛尾。 由於今次屬即興,出發前並沒有準備太多資料,因此,當餐廳服務員推介這款菜式時,只抱著試一試的心態,當菜端上桌,吃一口便愛上了,因為紅酒燉製的牛尾味道很濃郁,出奇的美味。 原來燉牛尾是西班牙名菜之一,據說是每逢鬥牛之後,壯烈犧牲的牛隻,身體的不同部份會被取去烹調成不同的菜式,而牛尾則會用紅酒及香料燉製。 哥多華可算是西班牙最早燉製牛尾做菜式的城市,雖然不算是限定美食,但大多數遊客仍然會慕名而來,品嚐一道西班牙燉牛尾。 5. 恩潘納 Empanada 這款貌似中式炸餃子的Empanada,有人把它翻譯作恩潘納,真的真的很重要,不可不知。 跟中式餃子差不多的製作,小麥製成酥皮,包著肉或水果等不同的饀料。為甚麼看起來有點普通的恩潘納會是西班牙的傳統美食呢? 其實除了西班牙本土,遠在南美各國都有恩潘納,而且每一個國家都有各自的特色,計有墨西哥、智利、哥倫比亞、阿根廷 ... 不能盡錄,每一個國家的恩潘納無論是大小或饀料都不同,有興趣的可以跑到南美逐一把它嚐試呢! 看過本篇後便不用擔心,原來西班牙不只是有黑毛豬火腿和海鮮飯,我們還可以有很多選擇呢! 有機會到西班牙旅遊時,謹記不要錯過任何一款傳統美食啦! 更多西班牙遊記 行走世界記錄

斷捨離在澳門
文化創意
陳康妮・2025-07-01

2025年6月30日 論盡 斷捨離在澳門 近年多地興起實踐「斷捨離」的生活方式,這種源自日本的理念主要強調人對物品應進行取或捨,通過「斷」絕不需要的物品、「捨去」多餘的物品和「離」或擺脫對物品的依賴,簡化生活。 本地教育家陳康妮(Connie)創立澳門斷捨離學會,推廣「斷捨離」理念,她相信種子已經在澳播下,正在慢慢發芽成長。 市民在斷捨離學會會址挑選適合物品。 今年上半年學會推出不少活動。在三月,每周三晚有一小時定期回收活動,旨在鼓勵市民將不需要的物品轉化為他人所需的資源,實現共享,提升生活品質及推動社會可持續發展。收集物品包括全新或輕微使用的衣物、未過期的非易腐食品、嬰兒尿布、推車、長者護理用品、健康產品等,此外亦收狗糧、貓糧、各類配飾和手袋、未使用或輕微使用的護膚品,以及部分手提電腦及配件,如鍵盤、滑鼠等。 學會義工隊在五月又走進新口岸社區,開展家庭關懷探訪,旨在為弱勢社群送上關愛與支持,同時針對部分家庭的家居環境問題,為居民提供免費斷捨離整理服務。 除了每月的主題活動外,市民平時亦可以把自己不需要,但又符合學會要求的物品,直接送到會址。 市民在斷捨離學會會址挑選適合物品。 從線上到線下 數年前,Connie受家人經歷及書籍的啟發,開始了斷捨離之旅,並於二〇二〇年設立斷捨離社交平台群組,亦即斷捨離學會。現時已有逾三萬名群組成員,除了Connie的學生、其他學校的中小幼教師,亦有弱勢社群。 在成立學會的同一年,她向教會借用場地,設立實體共享空間。起初,共享空間接受所有物品,但後來發現部分物品乏人問津,而且不夠人手接收物品。經過不斷摸索,學會制定一份清單,列明可接受和不接受的物品種類,例如基於場地限制,不接受大型家具。 為了有效整理、管理共享空間,學會亦組織了義工隊,現時有二十七名成員,每個成員都有不同的值更時間。 本地教育家陳康妮成立澳門斷捨離學會。 學會發展新方向:關懷長者、共享食物 斷捨離學會今年已到第五個年頭,目前正處於「深耕細作」階段,未來將繼續在學校和社區推廣。Connie觀察到群組內有不少弱勢社群需要斷捨離服務,相信這也是斷捨離的社會意義之一。 隨著本澳人口高齡化,不少有積物習慣的長者開始對斷捨離服務有需求,尤其是獨居的婆婆,例如處理舊衣物、廢舊電器等。Connie相信未來將有更多人因不同需求和契機,加入斷捨離的行列。 目前學會的義工開始上門為長者提供斷捨離服務,至今已處理三十多個個案,並提供後續跟進和關懷、協助長者搬運物品。在提供服務前,他們會與案主簽署同意書,「有一個同意書給案主,確認他願意讓我們做斷捨離,是合情合理合法的。」 斷捨離學會成員在會址協助回收物品。 學會也為癌症關懷機構開辦斷捨離講座,幫助癌症病人及其家人整理物品,表達生前意願。 Connie又透露,學會現時正計劃的另一個新方向就是共享食物,惟推行食物共享需要格外謹慎,目前仍處於摸索階段。考量到食品安全問題,現時學會優先考慮分享有包裝、來源明確且未過期的食品。 斷捨離已不僅僅是一種整理家居的技巧,更是一種生活哲學、關懷社會的方式。澳門斷捨離學會以實際行動,一步步推廣著簡約生活的理念,並將這份關懷延伸至弱勢群體、長者,甚至癌症病患。Connie又相信,隨著越來越多的人加入斷捨離的行列,思考消費的價值,斷捨離這顆種子將在澳繼續茁壯成長,為更多人帶來更輕盈、更有意義的生活。

澳門斷捨離教育理念|陳康妮:斷舍離非一天能練成,需一點一滴積累
文化創意
陳康妮・2023-06-26

斷舍離和極簡生活並不是一天就能練成的,而是需要一點一滴的習慣的積累。希望這42個極簡生活小建議,可以幫助你逐漸形成斷舍離的習慣。我們要成為物品的主人,而不是被物品所束縛。bull;​養成健康的購物觀念:1. 必需品,再貴的也要買。2. 不需要的物品,再便宜也不買。3. 高品質的必需品,付款的那一刻是心疼的,但每次使用都無比的開心。4. 便宜的東西,只有在購買的那一刻是在滿足自己的購物欲,使用的時候每次都是折磨。5. 不要為了體現ldquo;合群rdquo;,去買一些不太需要的東西。6. 不要看見同事和室友都買,你就也想買,多問問自己是不是真的需要那件物品。7. 不要有rdquo;來都來了,總不能啥也不買吧rdquo;的心態。bull;​減少不必要的浪費:8. 別高估了自己的意志力,健身卡這種東西,大多數情況去不了幾次。9. 樂器、攝影等愛好,先用最低的成本嘗試一下,1個月後確定自己可以堅持,再入手昂貴的設備。10. 拒絕購買單一功能的物品,購買前先看看有沒有替代品。比如煮蛋器(可用鍋代替)、廚房計時器(可用手機代替)。11. 旅遊景點的東西不要買,基本不是必需品,品質也一般。bull;​控制購物欲:12. 逛超市之前先列一個清單,直奔主題去購買清單中的物品,就不會看見什麼都想買。13. 想買的衣服、包包可以放購物車裡,等過一個星期再去看,發現並沒有強烈的購買欲了。14. 不要為了贈品去買東西。15. 不要因為打折就購買,買回來發現並沒有那麼喜歡。16. 刪掉手機中的行銷號,他們都是在忽悠你買買買。17. 品牌溢價太高的商品不要買,多買性價比高的商品,尤其手機、包包。bull;​關於囤貨:18. 沒有什麼是必須囤貨的,比如紙巾、面膜,超市就是你的倉庫,需要了隨時可以買。19. 囤貨其實不省錢,反而造成浪費,比如囤了太多紙抽,每次可能會多抽幾張。20. 總覺得以後可能會用上的物品,其實根本不會用,比如一次性筷子。bull;​關於收納:21. 當你的物品非常精簡時,根本不需要收納。比如當你只有兩支筆,你就不會想著要買筆筒把它們收起來。22. 給每件物品規定它自己的擺放空間,用完立刻歸回原位,就不會把房間弄亂。23. 不是每天都用的物品儘量放到櫃子裡,防止落灰,房間也不會顯得淩亂。24. 控制物品增加的最好方法是扔掉收納盒,它們的存在就是縱容自己買回來更多物品。bull;​控制家中物品的數量:25. 購買一件新的物品前,先想想家裡是不是有同類物品了。26. 重複功能的東西只留一件,其他的都處理掉。27. 儘量一物多用,比如帶有內部空間的凳子,還可以當收納品。bull;​物品的去處:28. 還有價值的物品放到閑魚是一個不錯的選擇,但是不要花太多精力,買家討價還價也費時間。29. 不穿的衣服可以捐助出去,減少浪費,比如社區的舊衣物回收箱,或者支付寶內搜索ldquo;白鯨魚rdquo;,專門回收舊衣物的平臺。30. 不看的書籍可以賣給ldquo;多抓魚rdquo;二手書回收平臺,還可以在上面購買二手書,環保又省錢。bull;​環保也是一種極簡生活方式:31. 購買替換裝的產品,減少包裝的浪費,比如替換裝的洗衣液、洗手液。32. 少吃外賣,儘量選擇ldquo;不需要一次性餐具rdquo;33. 少網購,儘量實體店購物。34. 住酒店用分裝瓶自帶洗浴用品,少用酒店提供的用品。35. 出門儘量自帶水杯,少買飲料和礦泉水。bull;​信息也要極簡:36. 關掉你從來不看的app通知。37. 朋友圈資訊流精簡,遮罩微商、保險。38. 取消訂閱你從來不看的公眾號。39. 退出你從來不看的微信群。bull;​斷舍離習慣養成:40. 3分鐘能搞定的事情,立即動手去做。41. 每個月重新審視自己家中的物品,不需要的立刻丟掉。42. 如果家人不理解你的極簡行為,那麼先從自己的空間開始,慢慢影響他們。 陳康妮Miss Connie Chan專注於青少年LCP教育學習力生涯規劃積極心理學。)英國倫敦大學心理學學士澳洲墨爾本大學教育管理學碩士大學講師澳門資深教育學者澳門作家(書名:澳門教育創新)

澳門機械狗啤啤創業
文化創意
陳康妮・2022-12-28

澳門機械狗啤啤創業 原來創業不僅需要熱情 更需要細心和堅持 只有不斷思考,進行總結反思 才能創業成功啊! httpsmp.weixin.qq.coms3rUYUWbFCZ2fp3CbZ3nQ 作者:陳康妮 聲演:何小蛋 音效及配樂:林仕翰 監製:林仕翰 春天到了,澳門春意盎然,公園裡的花花草草都煥發出了新的活力,很多人來到公園散步、野餐。機械狗啤啤也不例外,它已經在家呆得太久了,冬天的時候由於天氣冷,啤啤不願意出門,現在春天到來,溫度也逐漸上升,啤啤感到身心舒適。機械狗啤啤繞著公園散步,看著遊人歡快的神情,啤啤的內心也跟著雀躍起來。 今天有微風,天空藍藍的,機械狗啤啤把從家裡帶來的風箏拿了出來,這是一隻冰墩墩模樣的風箏,是啤啤用了半個多月畫出來的,是啤啤的得意之作。啤啤剛剛將風箏拿出來,就吸引了一群小朋友的注意,冰墩墩是十分受歡迎的卡通形象,小朋友們帶著自己的家長來到了啤啤旁邊,嘰嘰喳喳地詢問製作風箏的過程。啤啤被突如其來的關注弄得有些不好意思,不過還是耐心地回答小朋友們的問題。 ldquo;啤啤,你還有做了其他風箏嗎?我也想要放風箏呢!"一名小朋友好奇地詢問道。 ldquo;是啊,是啊,我們也想要放風箏!"小朋友們像是在上課一般,都紛紛舉手。 ldquo;不好意思啊,我只做了這一隻風箏。"啤啤沒有想到自己做的風箏如此受歡迎,有些不好意思地回答道。 ldquo;放風箏真的是很有意思的一件事情,男女老少都很喜歡呢!"一位看起來十三四歲的少年說道。 ldquo;雖然只有這一隻風箏,但是我可以請大家跟我一起放啊。"啤啤大方地邀請周圍的人跟它一起放風箏。就這樣,啤啤在放了一個下午的風箏之後,有些疲憊地回家。 ldquo;既然大家都很喜歡放風箏,而我也會製作風箏,我是否可以嘗試製作風箏然後賣掉呢?這也算是一次小小的創業吧。"啤啤開心地想著。 啤啤的行動力一直都很強,所以有了這個創業的念頭,它便立刻開始動手設計風箏圖案。冰墩墩的圖案形象不能商用,但是還有其他可愛的卡通形象,也十分受大家的歡迎,就比如說機械狗啤啤的模樣就很可愛,如果將自己的形象製成風箏,應該也是會受到歡迎呢,而且別人看到自己的卡通形象,更像是一種品牌形象呢。 啤啤還選擇了一些其他卡通人物,當然還包括一些風箏的經典形象,比如小飛機、小燕子、章魚等。啤啤打算先設計好風箏的圖案,再構思風箏的構造。因為不同的圖案所需要的風箏大小不同,所以就需要應用不同的原理,只有這樣才能讓風箏伴著微風飛起來,而且還需要一些質量可靠的風箏線。這樣一想來,製作風箏還是非常麻煩的,啤啤想到這裡有點洩氣,覺得工作量實在是太大了,於是決定找一個幫手,找一個合夥人。 它找來了機械狐狸莉莉。莉莉對於一切事物都充滿好奇心,聽了啤啤的想法,莉莉十分贊同,它準備幫助啤啤為風箏上色,有了莉莉的幫助,工作量一下子減輕了不少。終於在三天後,啤啤做出了二十隻風箏。它們拿著風箏興高采烈地來到了公園。 比較奇怪的是,今天公園裡的遊人不多,但是啤啤的攤位也吸引了一些人。這些人一邊拿起來翻看風箏的圖案,一邊又詢問價錢,但是購買的卻沒有幾個人。啤啤站了快一個小時,只有一個風箏被買走。 ldquo;為什麼大家都不買呢?"看到自己費盡心思做的風箏沒有想象中受歡迎,啤啤感覺有些失落。 ldquo;媽媽,我想要買風箏。"一個小朋友來到了攤位前。 ldquo;今天先不買了吧,媽媽看了天氣預報,一會可是要下雨呢。"媽媽拒絕了小朋友的要求。 ldquo;原來如此,是我沒有注意今天的天氣,怪不得公園人這麼少,原來今天是下雨天。莉莉,我們今天先回去吧,等到晴天再出來吧。"啤啤恍然大悟。 隔了兩天,啤啤在出門前特意看了天氣預報,是一個大晴天,它又帶著風箏來到了公園。今天公園裡的人很多,但還是和第一次情況一樣,沒有多少人注意到它們,啤啤開始陷入了沉思。 ldquo;對,只有我先放風箏才能有更多的人看到啊。" 於是啤啤讓莉莉幫忙看著攤位,自己放了一個彩色的風箏,這樣就很多人看到風箏了。短短半個小時,風箏就都賣光了,啤啤和莉莉開開心心地回家。 ldquo;原來創業不僅需要熱情,更需要細心和堅持,只有不斷思考,進行總結反思,才能創業成功啊。"啤啤在日記本裡寫下了這樣一段話。