搜尋

搜尋結果

iPhone SE 2 2018登場 玻璃機身設計流出 小屏控必入手
科技新知
Chrysalids 少爺・2017-08-09

Apple將於下月發布新一代iPhone 8、iPhone 7S系列,大家都一直期待新一代iPhone的誕生,不過同時卻似乎淡忘了Apple另一系列iPhone SE 2。之前一直都有傳聞指Apple會在 iPhone 7s和iPhone 8發表前,推出走平價路線的iPhone SE 2。不過近日的消息卻一唱反調,指iPhone SE 2並不會於今年推出,並會改為2018年第1季推出。在iPhone「愈出愈貴」的情況下,iPhone SE 2的登場相信會吸引不少budget有限的用家注意! iPhone SE 2 2018第1季登場 1/ 螢幕約 4-4.2 吋 根據科技媒體Tekz24的報導指出,iPhone SE 2將全於印度組裝,並會於2018年第1季正式發布。iPhone SE 2會繼續保留小屏幕的設計,螢幕尺吋大約是4-4.2 吋之間。比起iPhone 7的5.44吋屏幕小約1.22吋,比起iPhone 7plus的6.23吋,喜歡用手機看video的用家可能會覺得這size有點小。 2/ 1,200萬像素鏡頭 而iPhone SE 2則有機會使用與iPhone 7同級的A10雙核處理器、2GB RAM、正背面分別提供500萬和1,200萬像素鏡頭(與iPhone 7一樣),並配備第2代 Touch ID傳感器。這樣看來功能上絕對不會比iPhone 7遜色。 早前在網上曝光的 iPhone SE 2 機背零件,顯示Apple或為iPhone SE 2改用玻璃機身設計。不過一切都要以Apple最後公布的版本為準。 3/32GB及128GB選擇 iPhone SE 2將運行iOS 11系統,電池容量更將提高至1,700mAh。不過iPhone SE 2只有32GB和128GB兩種選擇,平時有用iPhone的大家都知道,32GB未必夠用,128GB又覺得有點多,要選那款的確令人頭痛。而32GB iPhone SE 2的暫定售價為399美金(約港幣3700)及128GB iPhone SE 2則售 499美金 (約港幣4600)。相比起iPhone 7/7s,這售價相當吸引,Apple應希望以此吸引budget有限的用家由 Android 轉投 iPhone! 4/ 顏色仍然是謎 第一代iPhone SE有4種顏色,金、銀、太空灰、玫瑰金。而iPhone SE 2的顏色亦未有公布,估計與iPhone SE的顏色相約,會有玫瑰金色及太空灰外殼,但會不會有新顏色登場?各位果迷可以期待一下! 以上文章及圖片均轉載自網路,所有版權歸原作者所有 原文地址:https://hk.style.yahoo.com/

我們是幫兇?『鉭』害死很多剛果人
有機健康
合資格90後・2015-08-06

根據市場預測,2015年會預計售出超過15億台連網裝置 過渡開採亦導致環境嚴重破壞 自1996年起,因資源搶奪導致數百萬人流離失流甚至死亡 我們一直希望公平交易,如咖啡豆、巧克力等,亦應正視科技產品原材料 科技產品組件原材料「鉭」 你知道嗎?自1996年起,超過五百萬剛果人死於非命,奴役、強暴、折磨被當作是一種戰爭武器,這對我們有什麼關係?答案是有的,很遺憾,只要你擁有一台科技產品如智慧型手機或平板電腦,你很可能是元兇之一,對於我們而言,可曾想過手上的這一台是血淋淋的手機或平板? 這一切其實始於一種稱為「鉭」的礦物,這是一種具防腐蝕性的熱導體,常用於電子產品中以儲存電力。而鉭大多開採自剛果,為應付市場龐大的需求,鉭的需求於近年急增,而當地鉭鐵礦大多由武裝份子掌控,迫使當地居民於環境惡劣的情況下以生命換取低廉的收入,市場預計2015年光是移動裝置會售出超過15億台,數量驚人,同時亦說明更多剛果居民因此而被壓迫甚至死亡。 實際上,剛果現在面臨的威脅同樣因科技而曝光,讓更多人得知當地礦產的情況,然而,我們每天用來追蹤朋友圈,發表人生自由的工具,同樣亦是迫害的工具,實在非常諷刺。現時在美國,已經就相關議題如公平交易正進行交涉,英國立法機關亦嘗試仿效美國,而手機製造廠Nokia就針對剛果礦產資源問題展開詳細討論。故此,或許我們能力所及並不多,但下次購買科技產品時,不妨想想一想產品的來源?誰創造的?為什麼被創造?因為我深信,既然動保法再一次掀起大眾心弦,哪麼人命對你又算什麼?

【馬介休特備節目 - 小姐Friend’s Meeting No. 4 5 6】|歡樂馬介休|
歡樂馬介休
bacalhau・2019-07-31

靚女教你多倫多英文! 唔係”惰Lun惰”... 仲有法文Cheers同司儀口才?! 由三位英俊瀟灑嘅「澳門先生」帶大家認識 選美佳麗優雅大方以外,活潑歡樂的一面 *每集有三位佳麗,每個星期四更新 本集候選佳麗: 4號 邱國晴 Emily 5號 梁洛郗 Bobo 6號 汪靈 Romi ————————————— 太陽城集團呈獻 澳門小姐競選2019 總決賽詳情: 日期 : 2019/8/13 時間 : 8:00pm 地點 : 澳門威尼斯人 金光綜藝館 #Missmacau2019 #macaupageantalliance #missmacauofficial -------------------------------------------------------------- 快快訂閱【歡樂馬介休YOUTUBE頻道】 右上角紅色訂閱按鈕啊BB 速速讚好【歡樂馬介休FACEBOOK專頁】 https://www.facebook.com/bacalhau.ent/ 慢慢追蹤【歡樂馬介休INSTAGRAM專頁】 https://www.instagram.com/bacalhau.ent/ 齊齊聊天【歡樂馬介休FACEBOOK群組】 https://www.facebook.com/groups/bacal... -------------------------------------------------------------- 〔馬介休女玩員粉絲專頁〕 - BOBO - FB粉絲團:https://www.facebook.com/bobo1030.mo/ IG專頁:https://www.instagram.com/wongkitian/ - 啊花 - FB粉絲團:https://www.facebook.com/FlowerIeong56/ IG專頁:https://www.instagram.com/flowerieong56/ YOUTUBE頻道:https://www.youtube.com/channel/UCLgP... - VIVI - FB粉絲團:https://www.facebook.com/vivi617.mo/ IG專頁:https://www.instagram.com/semvi09__pb/ - 芊華 - FB粉絲團:https://www.facebook.com/chinwawawa/ IG專頁:https://www.instagram.com/wawaeatzz/ YOUTUBE頻道:https://www.youtube.com/channel/UCobD... - MARY - FB粉絲團:https://www.facebook.com/mary.music.p... IG專頁:https://www.instagram.com/maryyyyylo/ YOUTUBE頻道:https://www.youtube.com/channel/UCgC1... -------------------------------------------------------------- 〔馬介休男玩員粉絲專頁〕※就睇下有無人like男仔 - 龍哥 - FB粉絲團:https://www.facebook.com/brodragon.mo/ IG專頁:https://www.instagram.com/leongchilong/ YOUTUBE頻道:https://www.youtube.com/channel/UC8NF... - 華浚 - FB粉絲團:https://www.facebook.com/wachon115/ IG專頁:https://www.instagram.com/wachon115/ YOUTUBE頻道:https://www.youtube.com/channel/UC5Vc... - 黑GAP - FB粉絲團:https://www.facebook.com/gapkevinho/ IG專頁:https://www.instagram.com/howengkin/ YOUTUBE頻道:https://www.youtube.com/channel/UC4LW... - RICO 凌永豪 - FB粉絲團:https://www.facebook.com/RicoLinkLink/ IG專頁:https://www.instagram.com/0rico/ YOUTUBE頻道:https://www.youtube.com/channel/UCrtd... - 靚仔達 - FB粉絲團:https://www.facebook.com/handsomepst217/ IG專頁:https://www.instagram.com/pst217/ YOUTUBE頻道:https://www.youtube.com/channel/UCem_... -------------------------------------------------------------- - 其他平台 - 微信公眾號/微博/騰訊視頻/土豆網/嗶哩嗶哩:欢乐马介休

【馬介休特備節目 - 小姐Friend’s Meeting No. 1 2 3】|歡樂馬介休|
歡樂馬介休
bacalhau・2019-07-23

世間上竟然有一個帶你認識美女的節目! 真係好人一生平安~功德無量啊~ 由三位英俊瀟灑嘅「澳門先生」帶大家認識 選美佳麗優雅大方以外,活潑歡樂的一面 *每集有三位佳麗,每個星期四更新 本集候選佳麗: 1號 顧容 Nora 2號 黃馨慧 Crystal 3號 陳曉彤 Emily ————————————— 太陽城集團呈獻 澳門小姐競選2019 總決賽詳情: 日期 : 2019/8/13 時間 : 8:00pm 地點 : 澳門威尼斯人 金光綜藝館 -------------------------------------------------------------- 快快訂閱【歡樂馬介休YOUTUBE頻道】 右上角紅色訂閱按鈕啊BB 速速讚好【歡樂馬介休FACEBOOK專頁】 https://www.facebook.com/bacalhau.ent/ 慢慢追蹤【歡樂馬介休INSTAGRAM專頁】 https://www.instagram.com/bacalhau.ent/ 齊齊聊天【歡樂馬介休FACEBOOK群組】 https://www.facebook.com/groups/bacal... -------------------------------------------------------------- 〔馬介休女玩員粉絲專頁〕 - BOBO - FB粉絲團:https://www.facebook.com/bobo1030.mo/ IG專頁:https://www.instagram.com/wongkitian/ - 啊花 - FB粉絲團:https://www.facebook.com/FlowerIeong56/ IG專頁:https://www.instagram.com/flowerieong56/ YOUTUBE頻道:https://www.youtube.com/channel/UCLgP... - VIVI - FB粉絲團:https://www.facebook.com/vivi617.mo/ IG專頁:https://www.instagram.com/semvi09__pb/ - 芊華 - FB粉絲團:https://www.facebook.com/chinwawawa/ IG專頁:https://www.instagram.com/wawaeatzz/ YOUTUBE頻道:https://www.youtube.com/channel/UCobD... - MARY - FB粉絲團:https://www.facebook.com/mary.music.p... IG專頁:https://www.instagram.com/maryyyyylo/ YOUTUBE頻道:https://www.youtube.com/channel/UCgC1... -------------------------------------------------------------- 〔馬介休男玩員粉絲專頁〕※就睇下有無人like男仔 - 龍哥 - FB粉絲團:https://www.facebook.com/brodragon.mo/ IG專頁:https://www.instagram.com/leongchilong/ YOUTUBE頻道:https://www.youtube.com/channel/UC8NF... - 華浚 - FB粉絲團:https://www.facebook.com/wachon115/ IG專頁:https://www.instagram.com/wachon115/ YOUTUBE頻道:https://www.youtube.com/channel/UC5Vc... - 黑GAP - FB粉絲團:https://www.facebook.com/gapkevinho/ IG專頁:https://www.instagram.com/howengkin/ YOUTUBE頻道:https://www.youtube.com/channel/UC4LW... - RICO 凌永豪 - FB粉絲團:https://www.facebook.com/RicoLinkLink/ IG專頁:https://www.instagram.com/0rico/ YOUTUBE頻道:https://www.youtube.com/channel/UCrtd... - 靚仔達 - FB粉絲團:https://www.facebook.com/handsomepst217/ IG專頁:https://www.instagram.com/pst217/ YOUTUBE頻道:https://www.youtube.com/channel/UCem_... -------------------------------------------------------------- - 其他平台 - 微信公眾號/微博/騰訊視頻/土豆網/嗶哩嗶哩:欢乐马介休

【濟州島 韓國】航拍海岸線 最美夏天騎行資訊
走遍世界
背包旅神・2019-08-04

在濟州島最適合騎行的季節衝動騎上單車,來了一個環島之旅..濟州島實在太漂亮了啦!! 租車 如果你打算帶自己的單車的話,這一part可以略過了,但你沒有單車的話,濟州市還蠻多單車店可以租單車的,可以先事先聯絡好單車店老闆。一般上租超過3天的話,他們會提供免費的機場接送到單車店拿單車,或者如果不是一下機馬上騎的話,濟州市住宿到單車店也是免費的,然後騎完後還會送回你到住宿,非常貼心。單車的價錢一天是13000到25000都有,看你要什麼類型的車,當然越貴性能越好。原本我是選了一台18000的車,但是老闆積極推薦我13000的就好了,因為她說我一個女生,如果在路上遇上爆胎會很麻煩,所以他就跟我說不會爆胎的輪子比較好,他一天可以多賺5000也不要,還推薦我最便宜的,我還跟他確認是不是可以騎,他就說他很多客人都騎這一款,所以我就放心了,覺得老闆人很好,其實我一路上遇到的韓國人都很好,跟韓劇上會罵人的韓國大叔大嬸不太一樣。單車還包括頭盔,手機架,行李架,行李繩,單車鎖,地圖,還有完成證書。 参考租车行:Jeju Hikinghttp://www.jejuhiking.co.kr/Yong Duamhttp://www.jeju8253.com/BMS hikinghttp://www.bms-hiking.co.kr/Bike Triphttp://www.biketrip.co.kr/

如果夢境可以購買,你會訂購怎樣的夢?而從夢境中感受到的各種情緒,將用作購買夢境的費用...
其他
皓芯・2022-02-26

「夢境,是一個能窺探自己內心的異空間。」──澳門女藝術家郝元春「夢的切片」插畫創作展 人類自有記錄以來,每個人都會做夢。不管前一晚做了什麼樣的夢,在即將開啟新一天的早晨,人們也會回味著前一晚的夢境旅程;然而,可有想過一個神祕的所在,正從人們做夢後感受到的各種情緒,用「夢境支付系統」結算著「夢境費用」? 買完夢境後我們就會開始遺忘…… 本書《歡迎光臨夢境百貨:您所訂購的夢已銷售一空》,當我看到書名時,就被「您所訂購的夢已銷售一空」這一句話吸引了。從來沒想到「夢」是可以購買的!故事分成九章,其中兩篇後記和書中「時間之神與三個徒弟」的寓言故事,也讓筆者印象深刻。 「夢的價值取決於客人,差別就在於客人是不是自己開悟。」──《歡迎光臨夢境百貨》 本書中筆者很喜歡的一句話。本書把人們睡眠時做的夢境,變成一個個實際的商品製作並可任意選購,代入時下流行的電子支付,夢境結束後獲得的各種情緒(如:心動、憤怒、混亂、溫馨…),就是用來支付「夢境費用」。 本書《歡迎光臨夢境百貨》,從2020年7月韓國出版紙本書以來,單靠好評與口碑成功在網路上打響知名度,成為韓國各大暢銷榜的「年度之書」,Super Junior 東海、SHINee 溫流、SEVENTEEN 圓佑、宇宙少女 苞娜、安兪真、李玹珠等韓國藝人,紛紛在自己的社交平台分享了這本書,更獲韓國知名製作公司買下了改編權。 作者李美芮,出生於釜山,在釜山大學主修材料工程學系,曾於三星電子擔任半導體工程師。作者在某次訪談中提過,高中就想寫一本跟夢有關的小說,小說素材就是來自她本人做過的夢。一場美夢之後,就放手隨它去,未免可惜。從這個感覺出發,夢境百貨就這樣一點一滴成形。 故事由主角佩妮進入「達樂古特夢境百貨」面試開始,剛成為職場新鮮人的她,進入夢境百貨之後,從認識百貨中每個樓層個性迥異的樓管、跟著創辦人達樂古特學習,以「眼皮秤」測量睡意,看著刻度從清醒到睏倦。協助解決各種顧客的難題,製夢師的會議、本月暢銷作品、頒獎典禮等等,帶領讀者進入這個充滿奇思妙想的百貨公司。 故事中的這間「達樂古特夢境百貨」,樓高五層,商品是各式各樣的夢境,人潮絡繹不絕,二十四小時不歇業。內裡有著現實世界所沒有的職業和銷售模式,從人類到動物,每一層樓都提供別出心裁的夢。和真實世界的百貨公司一樣,只要你想要的,店員都可以在這裡幫你找到。只要你提出需求,店主會「富有深意」地推薦你適合的夢境。 本書封面插畫繪者,是曾獲德國紅點設計獎的Dyin Li。深藍底星空背景、各樓層特色、俏皮可愛的配角、手持夢境百貨小道具的主角位居畫面正中,而屋頂是店主神祕閣樓,設有各時區時鐘,以便接待全球不同地區的客人。 這間專門販售各樣夢境的「達樂古特夢境百貨」,客人們入睡後才能入場。人們入睡後穿著各式睡衣,夜光獸幫裸睡的客人穿上睡袍,人們在百貨公司內四處奔走,選購自己喜歡或想要的夢境。除了為人類設計的夢,連動物的都有!是一間動物友善商店,有製夢師專門針對動物製作的夢,動物們也能在百貨公司內挑選夢境。 選購不同製夢師製作的夢,各種不同類型的夢在這裏應有盡有,有預知夢、匿名夢、胎夢、冒險夢、戀愛夢、睡午覺的短夢、或是特價出清的黑白夢,其中「來自匿名者的夢」讓筆者覺得鼻酸。每個夢都是製夢大師耗費心血的傑作,數量有限,欲購從速。在夢境的世界裡,也有像是奧斯卡大獎一樣的獎項評選優良的夢。 「夢可以構成很有趣的故事,但所有重要的事,只發生在我們清醒時。」──電影《沙丘》 夢境中的一切是多麽的栩栩如生,不知道我是不是也在睡著之後,無意識地光顧了這間百貨公司,我支付的是哪些情緒比較多? 「夢的價值取決於客人,書的價值取決於讀者」。此時此刻的你,你想要買什麼樣的夢?今晚精心挑選一個夢境,陪伴自己。明天與我分享好嗎?祝我們都在夢境百貨購物愉快。 《歡迎光臨夢境百貨:您所訂購的夢已銷售一空》 作者: 李美芮 譯者: 林芳如 繪者: Dyin Li 出版社:寂寞出版 出版日期:2021/08/01 ISBN:9789869924467 訂購地點: 一書齋 圖片來源: 網絡圖片 https://www.booklife.com.tw/baike-detail/5/1609 https://www.books.com.tw/products/0010897792

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

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

Spring Boot 08 - 多情境設置 maven profile 與 application.properties 進階篇
科技新知
MacauYeah・2025-03-11

上期我們介紹完最直觀的用法,這期我們再來討論多管齊下的方向。 在開始之前,筆者總結一下上期的 Profile 的要點。 Spring boot 是經過 spring.profiles.active 去選擇什麼 (spring boot) Profile 生效 spring.profiles.active 它可以在runtime(運行時)動態更改 maven 是經過 xml 去選擇編譯時的 (maven) profile maven 編譯時為 spring.profiles.active 填入一個固定值 另外,筆者亦在測試途中,發現一個現像。 maven 並不提供混合 profile,即使下指令同時觸發兩個 profile ,最後亦只有一個 maven profile 生效。但這個部份筆者未在官方文件中找到,大家如果有任何發現,可以幫忙修正。 Spring boot 混合 Profile 當我們經IDE編譯時,可以為 spring.profiles.active 填入多個值,各值之間用逗號分隔,就可以觸發多個 profile 。 spring.profiles.active=dev,uat 程式碼中的application.properties, application-dev.properties, application-uat.properties 都會生效 Spring boot會先後載入上述三個檔案,如果有重複值,後面出現的會覆蓋前面的值。 spring.profiles.active如果填入的值與現在的application-xxx.properties不匹配,該部份不生效,例如 spring.profiles.active=dev,uat 程式碼中只有application.properties, application-dev.properties,但沒有application-uat.properties Spring boot會先後載入上述兩個檔案 上述的都好理解,當大家都接受上面的結論後,再來看這個現像。 spring.profiles.active 是啟動spring boot時,作為選擇profile的依據。 application.properties可以有一個預設的spring.profiles.active,正常跑spring boot就會看它。 正常跑spring boot時,還可以通過傳入參數--spring.profiles.active=xx,改變那個值。 Spring boot test 因為結構特殊,它只會看到 application.properties 中的那個spring.profiles.active值。 Spring boot test 暫時沒有方法傳入參數spring.profiles.active,但可以經程式碼 @ActiveProfiles 硬改運行中的 profile 。spring.profiles.active亦只會顯示 application.properties中的那個值。 Spring boot 混合 Profile 例子 大家看完概念之後,可以來看看實際例子。 當什麼都不加,就是根據application.properties的spring.profiles.active來啟動profile。 mvn clean compile spring-boot:run # or mvn clean compile package java -jar target/spring-boot-profile-0.0.1-SNAPSHOT.jar 正常spring-boot:run的情況下,可以經的 --spring.profiles.active 覆蓋過application.properties內的值。 mvn clean compile spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev --spring.profiles.active=uat" mvn clean compile spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev,uat" # or mvn clean compile package java -jar target/spring-boot-profile-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev --spring.profiles.active=uat java -jar target/spring-boot-profile-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev,uat 上述例子,若dev,uat內的值沒有衝突,沒有覆蓋問題。但如果有衝突,最後會是uat內定義的值。 Spring boot test Profile 例子 因為不是正常spring-boot:run,所以那些參數都沒有用,具體只會看application.properties內預設spring.profiles.active mvn clean compile test -Dspring-boot.run.arguments="--spring.profiles.active=dev,uat" # arguments will be ignored, same as mvn clean compile test Maven Profile 例子 加入Maven之後,就可以修改application.properties內的預設spring.profiles.active。但要注意,maven只會有單profile 假設pom.xml如下 application.properties如下 spring.profiles.active=@active.profile@ 下述三組例子,有且只有uat生效。因為maven的uat生效後,會修改 mvn clean compile spring-boot:run -Puat # or mvn clean compile package -Pdev -Dci=true java -jar target/spring-boot-profile-0.0.1-SNAPSHOT.jar # or mvn clean compile test -Puat 當然,你想要弄一個maven mix profile 也可以 以下例子可以令 dev, uat 同時出現在spring.profiles.active mvn clean compile spring-boot:run -Pmix # or mvn clean compile package -Pmix java -jar target/spring-boot-profile-0.0.1-SNAPSHOT.jar # or mvn clean compile test -Pmix Maven Profile Spring boot test例子 上述例子都了解後,最後就來看看全部混合的情況 當Test case中沒有硬改 profile 定義,application.properties中的spring.profiles.active就直接作用。以下情況就是同時運行dev,uat // java @SpringBootTest class ProfileTests { } // bash mvn clean compile test -Pmix 當Test case中有定義@ActiveProfiles ,application.properties中的spring.profiles.active的值會保留,但不在該test case中生效。以下情況就是同時運行uat,dev,但讀取spring.profiles.active的值會是dev,uat。 // java @SpringBootTest @ActiveProfiles(value = { "uat", "dev" }) class MultipleProfileUatDevTests { } // bash mvn clean compile test -Pmix 如果我們把maven 指令中的加入package,預期 test 執行的是 uat,dev 。而 jar 的打包結果會是 dev,uat。 // java @SpringBootTest @ActiveProfiles(value = { "uat", "dev" }) class MultipleProfileUatDevTests { } // bash mvn clean compile test package -Pmix 但請盡量不要這些做,因為會越來越混亂,特別是打包 prod 環境。為減少出錯的機會,例如test污染了prod的環境,筆者在package時,通常都會跳過test。 mvn clean compile package -Pprod -Dmaven.test.skip=true

Spring Boot 06 - Spring Boot Web 調試工具
科技新知
MacauYeah・2024-08-02

之前兩節,都一直在講怎樣寫code,也介紹了Test Case的好。若為初次接觸,Spring有很多設定需要摸索,若開始時就設定錯誤,對不少人來講都會有很大打擊。在這裏,筆者就介紹一些vscode和spring的工具,可以讓IDE多幫忙一下,減少走歪路的機會。 vscode插件 以下兩個插件,都在於提示用戶設定。 Spring Boot Dashboard (vscjava.vscode-spring-boot-dashboard) 可以那它來運作spring boot app,省去找尋main 位置的麻煩 綜覽整個程式中的所有Bean (Bean是一個很重要的元素,日後會再提及) 若程式為Spring boot web,可以顯示所 http endpoint。 Spring Boot Tools (vmware.vscode-spring-boot) 檢查設定檔的設定值有沒有寫錯 (application*.properties, application*.yml) 綜覽檔案中的有以@為首的與spring相關的元素(檔案很大時就會有用) 可以在IDE運行spring時,查看@元素的bean資訊 (not works ?, 加了actuator也是沒有看見) Spring Initializr(vscjava.vscode-spring-initializr) 經網絡初始化spring 專案的依賴引用設定 Maven for Java (vscjava.vscode-maven) 若大家在使用Spring Initializr時,選取了maven作管理工具,那麼這插件就可以在後續幫忙更新引用。 若專案的Spring 及㡳層引用有變,vscode也需要它來引用更新。 這是java 開發工具包(vscjava)的其中一員,它的其他插件也可以順帶安裝。 調試工具 - open api / swagger-ui 如果我們在開發Web http API ,其實都是為了該某個客戶端使用。但如果該客端明白我們的API該怎樣使用,大家總不會逐個連結,自行編寫使用手冊及範例吧。所以就有了open api 和 swagger-ui 的旦生 。 open api,就是一個公認的使用手冊標準,我們只要在spring-web中加入 springdoc-openapi-starter-webmvc-ui 的程式庫,就可以自動為我們的controller 生成 open api 的說明檔。 更強大的是,這個程式庫可以利用剛生成的open api,配上 swagger-ui ,自動測生一個可供測試的頁面。這個頁面可以供碼農們直接操作,也會產生對應的 curl 指令,讓碼農們可以在任何的主機上重複。這樣,那麼是沒有太多解釋的說明文檔也可以使用。 做法很簡單,在pom.xml中加入依賴。 org.springdoc springdoc-openapi-starter-webmvc-ui 2.5.0 (由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) 然後我們就可以加入Controller,運行 spring 後,我們可以在 http://localhost:8080/swagger-ui/index.html 找到 swagger 的頁面,然後就可以在 ui 上測試API了。 躲在Proxy背後的 swagger 如果你跟筆者一樣,使用 code-server 或 github codespaces ,你就不能很隨意地連接到 8080 端口。你只能經過Http Proxy去訪問。這樣 open api的原有的設定就不合用了。 這時我們需要自行修改 open api 的 bean,加入我們真正的根路徑。然後筆者使用 code-server,而IDE只會在port 9000上執行,它對外的前置路徑會是 http://localhost:9000/proxy/8080/。 @Bean public OpenAPI springShopOpenAPI() { Server server = new Server(); server.setUrl("http://localhost:9000/proxy/8080/"); return new OpenAPI().servers(List.of(server)); } (由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) 然後訪問 http://localhost:9000/proxy/8080/swagger-ui/index.html,還會發現 "Failed to load remote configuration." 。但你可以在 "explore" 搜尋欄位內貼上 http://localhost:9000/proxy/8080/v3/api-docs,再一次搜尋檔案,就回復正常了。 註:如果你熟習Nginx這類Reverse Proxy ,你的環境有條件直接修改 Request Header,加入X-Forwarded-*,就不用煩惱寫Bean了,也不用手動在explore裏重新修正api-docs的位置。詳見 https://springdoc.org/index.html#how-can-i-deploy-springdoc-openapi-starter-webmvc-ui-behind-a-reverse-proxy Controller的繼承 Spring Controller的 @ 標記 (Annotation) ,其實支援繼承的。經Spring 生成的 api docs,也有如何效果。例如以下程式碼 public class ParentController { @GetMapping("/postfix") public String postfix(){ return "this is postfix"; } } @RestController @RequestMapping("/api") public class ChildController extends ParentController { @GetMapping("/direct") public String directCall() { return "direct result"; } } (由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) 在ChildController的實例中,它會有兩個API,分別是 /api/direct /api/prefix 它支援Java Function Overwrite(覆寫),但不能改 @ 標記,以下就是一個錯的例子 @RestController @RequestMapping("/api") public class ChildController extends ParentController { @GetMapping("/Overwrite") // 把這個 @ 行刪了才能正常執行 public String postfix(){ return "this is Overwrite"; } }(由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) Source Code spring boot web api doc

【日本。大阪】◆交通 教學◆ 關西機場往難波、心齋橋、梅田交通 ◎ 地鐵、機場巴士
走遍世界
80後愛旅行✈️・2019-04-25

關西機場 > 難波、心齋橋、梅田 一般使用的方式有2種: 機場巴士 和 電車 機 場 巴 士 從第1航廈出發的旅客請在第1航廈1樓正面的巴士乘車處 (開往各地) 上車。 在1樓外側的售票機處購買車票。 從第2航廈出發的旅客請在第2航廈1樓正面的巴士乘車處 (開往各地) 上車。 在1樓外側的售票機處購買車票。 一般情況機場巴士會從第2航廈出發, 再到達第1航廈開往各地 關西機場 > 難波 分為「一般巴士」 和 「深夜巴士」 一般巴士: 06:10 - 22:55 (先由第2航站開出, 再到第1航站) 時間表: http://www.kate.co.jp/tcn/timetable/detail/OC 單程: 關西機場 ⇒ 難波(OCAT): 成人 1,050円 / 小童530円 來回: 關西機場 ⇔ 難波(OCAT): 成人 1,850円 / 小童 -- (乘車日起14天有效) 南海難波車站(深夜巴士): 共2班 (先由第2航站開出, 再到第1航站) 時間表: http://www.kate.co.jp/tcn/timetable/detail/NB 單程: 關西機場 ⇒ 南海難波車站: 成人 1,550円 / 小童780円 在大阪, 「難波站」其實有好幾個, 分別有「難波(OCAT)站」、「南海難波站」、「JR難波站」、「大阪難波站」等, 所以由關西機場到難波的巴士和深夜巴士分別是停靠「難波(OCAT)站」和「南海難波站」 兩站不是同一個站, 但要步行也不是太遠的距離 Klook.com // 關西機場 > 心齋橋 關西機場 > 近鐵上本町(心齊橋、OBP) 沒有額外分出深夜巴士的路線。 05:45 - 22:30 (先由第2航站開出, 再到第1航站) 分有「近鐵上本町(大阪喜來登都酒店)站」和「心齋橋(大阪日航酒店)站」 時間表: http://www.kate.co.jp/tcn/timetable/detail/UH 單程: 關西機場 ⇒ 近鐵上本町(心齊橋、OBP)站: 成人 1,550円 / 小童780円 來回: 關西機場 ⇔ 近鐵上本町(心齊橋、OBP)站: 成人 2,800円 / 小童 -- (乘車日起14天有效) 來回: 關西機場 ⇔ 近鐵上本町(心齊橋、OBP)站: 成人 2,000円 / 小童 -- (僅限乘車日當天有效) 關西機場 > 梅田 關西機場 > 梅田 (大阪車站前 (茶屋町、新梅田City、千里新城、新大阪) ) 沒有額外分出深夜巴士的路線。 02:45 - 01:45 (先由第2航站開出, 再到第1航站) 設有「新阪急酒店站」、「大阪Herbis站」、「大阪希爾頓酒店站」、 「茶屋町(阪急國際酒店)站」、「新梅田城(大阪威斯汀酒店)站」、「新大阪(阪急高速巴士轉運站)」、 「千裏新城(桃山臺)站」和「千裏中央站」 時間表: http://www.kate.co.jp/tcn/timetable/detail/UM 我們的飛機到關西機場第1航站大樓, 到達的時候大概是22:30, 過海關和行李輸送簡直極速, 我們竟然能趕上23:10的車~!! 如果飛機停泊比較遠, 下飛機後就有可能需要坐這種接駁車到主航站大樓 我們是要從關西機場去「梅田」方向 出閘後往巴士站5號的方向走, 就在入境的同一層 出門口後右手邊就是「車票銷售處C」, 這是唯一24小時有人工售票的窗口 而人工售票窗口旁就是自助售票機, 使用也非常方便! 1 首先按要去的站名, 「梅田」是大阪駅前的方向 2 然後選擇人數, 黑色是大人, 紅色是小童 如果需要買來回票的話, 則再按「往復券」 3 入錢後就能拿到票囉~ 非常簡單易用 而售票處對開馬路邊的地方, 就是巴士站 往不同地方的就要到指定的巴士站等車 一般旅客常到的「梅田」是5號站, 「心齋橋」是7號站。 「難波(OCAT)」是11號站, 而難波方向的深夜巴士「南海難波」則是2號站。 Klook.com // 我們要坐的是5號站的巴士, 去日本最大的好處是有大量的漢字, 所以基本上都能看懂的! 跟著地上的指示排隊 5號巴士站對開就是「關西空港駅」 車來了, 上車的時候把票給司機就可以了 行李會放在車下的行李箱, 放行李時會問你是在哪裡下車的, 因為下車站不同, 行李放置的位置也不同。所以務必要說對。 我們是在「HERBIS大阪」站下車, 放行李後會給你行李票, 下車時是憑票取回行李啊! 因為巴士一般都是先由第2航站大樓出發, 再到我們所在的第1航廈, 所以基本上車上已經坐得滿滿的, 我和老公也要分開坐。 並且行人道中還有一排的活動小椅子也要坐滿 (這種路中的小椅子好久不見了, 記得小時候坐的旅遊車才有的呢) 車上都有清晰顯示站名, 大站還有多國語言的廣播。 大概一個小時, 我們就到了~ 這裡就是「HERBIS大阪」車站 斜對面就是「大阪駅」 電 車 關西機場乘坐電車只能前往「難波」方向, 如要到達「心齋橋」、「梅田」等則需要由難波站轉乘其他交通工具前往 (如: 地鐵) (文末附上大阪地鐵圖) 關西機場 > 難波 的電車可以分為「普通車」、「機場急行車」和「特急Rapi:t」。 不管是你在第2航站還是第1航站都必須來到第1航站的「關西機場站」 (如果在第2航站, 出機場航廈後到正面左側去搭乘免費接駁巴士到第1航站 (關西機場第一航廈・AEROPLAZA)。 約需時7分鐘, 每2到8分鐘運行, 深夜則是每1小時一班) 到達第1航站後上2樓, 跟著指示走可見到「南海電鐵的關西機場站」 藍色的是JR, 而橙色是南海電鐵(NANKAI) 有人工售票處和自助售票機 (深夜航班到達時只能使用自助售票機) (官網照片) 在有人工售票處 需要購買「特急券」和「乘車券」的人排在右邊的隊伍(橙色) 通過官網、旅行社或在機艙內已購買乘車券和特急券的人排在左邊的隊伍(藍色) (http://www.howto-osaka.com/tc/rapit/howtotake/) 關西機場 > 難波 機場急行: 成人 920円 / 小童 460円 特急Rapi:t(普通席): 成人 1,430円 / 小童 720円 機場急行: 平日: 05:45 - 23:55 / 星期六日及節日: 05:47 - 23:55 特急Rapi:t(普通席): 平日: 06:52 - 23:00 / 星期六日及節日: 07:06 - 22:55 時間表: http://www.howto-osaka.com/tc/traffic/train/timetable.html 第1航廈< >第2航廈間的移動方式 大阪地鐵圖 (點擊連結大圖)