搜尋

搜尋結果

Spring Boot 08 - 多情境設置 maven profile 與 application.properties
科技新知
MacauYeah・2025-02-25

為何要有不同的建構 Profile Profile這一字,很難在IT技術文章中翻譯,它在Spring boot中的語意大概就是一個設定一個固定的運行環境參數合。例如我們做開發時,有些只想在開發環境中出現的設定,諸如測試用的資料庫、細緻一點的LOG層級,都寫在dev profile中。當換成正式環境時,我們也有一套全新的配置,而且會集中寫在prod profile中。把這些參數設定從程式碼邏輯中抽離,可以讓你的程式碼簡潔很多,也方便對比不同環境的設定。 application.properties Spring Boot (Spring Boot Starter) 就提供了 Profile 管理。我們可以為一個Spring Boot 模組設定多個不同的 application.properties src/main/resources/application.properties 為預設 (default profile) src/main/resources/application-uat.properties 為驗收環境專用 src/main/resources/application-prod.properties 為投產環境專用 src/main/resources/application-test.properties 為自動測試專用 在執行程式時,我們只要動改變啟動的參數spring.profiles.active,例如 mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=uat" # or mvn package && java -jar target/YOUR_JAR_NAME --spring.profiles.active=uat Spring Boot 就會指定載入 application-uat.properties 的內容,如果有些值沒有定義,它會再追溯到預設的 application.properties中。 在運行中改變啟動參數的情況可能不多,筆者更常用的情況是在編譯期間產生多個 Jar 檔,不同 Jar 檔指定不同的環境,方便系統管理員取用測試。想做到這個效果,我們需要在 application.properties 中,我們還需要加入一句spring.profiles.active=@active.profile@,並在編譯工具中加入這個變量,例如筆者常用的 maven pom.xml 中,就會有這一串設定 它在 maven clean compile package 時,就已經可以在JAR中填入固定spring.profiles.active。那麼每次執行時,都會是指定的profile。 mvn package -Puat java -jar target/YOUR_JAR_NAME 在這個例子中,JAR 中的 spring.profiles.active 就會固定是uat,我們不需要在啟動參數中加入字眼。 如果大家不會碰到混合Profile的話,其實上述的資訊已經足夠大家應付很多情境。 但當大家有追求,需要寫自動測試,有機會不同自動測試需要啟用不同的 Profile ,更有可能出現混合Profile的情況,這件事就變得很複雜。我們需要繼續深入了解一下 Spring Boot 的覆蓋機制,下面將會以測試方式導出結論。 如果真的對混合 Profile 沒有太多信心,我們也可以用單一 Profile 重組不同 properties 的方式,自行去模擬混合 Profile ,例如除了dev, uat, test之外,我們可以加入 dev-test, uat-test, default-test 作為驅分。這樣應該可以簡化測試的複雜度,不過 properties 檔案就可能會成幾何級成長。 但在某情特殊情況下,我們不可能簡單地重組 properties 等型式去做測試,例如針對部份uat-test的測試,只有部份可以執行,部份不可以,那麼我們還是需要用到混合 Profile ,限定某些測試需要執個某個 profile ,但其餘部份可以動態切換。 有條件的讀者,也可以先行試玩一下混合 profile 的特性,下期筆者再為不同情況作解紹。 混合Profile Source code spring boot profile

【台灣。台北】§米芝蓮推介早餐§ 阜杭豆漿
走遍世界
80後愛旅行✈️・2023-06-25

「阜杭豆漿」是一間位於台北華山市場二樓美食廣場內的一間小店,但其實大有來頭!! 是米芝蓮推介的早餐店!! 「阜杭豆漿」就在捷運善導寺站5號出口的旁邊 早餐店清晨05:30就開門,據說中午12:30關門但是只要東西賣完就會提早關門, 看了很多網友都說要清晨5點就來排隊,要不就是早上8點前就要到, 因為前一晚剛下飛機,確實不想一大早起來,所以我就反其道而行, 當天早上11:30才到善導寺站 本著吃到就吃,賣還就走的心態 結果我從捷運站上來,還在排啊!!有希望了!! 排了不到半個小時就來到2樓了 「阜杭豆漿」始終是在美食廣場內,為了排隊不影響到別人,還有專門的示意圖。 台北華山市場的美食廣場,目測80%的客人都是在吃「阜杭豆漿」。 餐牌 「阜杭豆漿」的動線是先點飲料 → 再點吃的 → 最後結帳 記得要預先想好要吃什麼,排到的時候直接點餐,不要到時候再想,這樣會阻礙後面的人啊! 冰豆漿、鹹豆漿、厚餅夾蛋、焦糖甜餅 「鹹豆漿」NTD 40- 「鹹豆漿」是這裡的必點之選!雖然在台灣住過四年,但其實我也沒嚐過鹹豆漿 鹹豆漿吃起來很像豆花,但是鹹的,再配上油條一起吃,口感更好! 「冰豆漿」NTD 30- 「冰豆漿」相對沒什麼特別,但也是蠻滑的,也不會很甜。 「厚餅夾蛋」NTD 50- 外皮有點略厚,比較韌,喜歡韌韌口感的朋友推薦這個! 但如果給我再選一次的話我會點薄餅夾蛋,口感應該會比較鬆脆,比較適合我。 「焦糖甜餅」 NTD 30- 這個不是必點的甜餅反而是我覺得是最好吃的!!裡面的焦糖不會過甜但味道很濃郁!!到現在都很回味!! 阜杭豆漿 阜杭豆漿:台北中正區忠孝東路一段108號2樓28號 (華山市場2樓) +886 2 2392 2175 05:30-12:30 (週一休息) 台北捷運善導寺站5號出口 https://guide.michelin.com/tw/zh_TW/taipei-region/taipei/restaurant/fu-hang-soy-milk

Tmux - 繼 Screen以後的Linux多工神器
科技新知
MacauYeah・2024-10-08

因為各硬件/軟件的發難,筆者又不得不回到那個只有純純linux tty console的世界。很多時候,那怕使用tty,我們在Desktop mode,也有現代terminal 可以用,需要多分頁,滑鼠選取文字、複制、貼上,都可以輕易做到。 但在mobile / tablet device 上,手指操作真的很不方便。又或者你像筆者一樣,即使有電腦,但要操作一些Linux VM,它們連ssh都沒有,只能直接登入它們的tty,那麼懂得使用Tmux進行分頁及複制、貼上,就變得很重要。 Tmux 是什麼? Tmux 就是可以在Linux Terminal 同一個窗口中,實現多工處理的小程式。就像我們利用多分頁一樣,不同分頁做不同的事。不過最大的差異就是,生成分頁,排列分頁,我們都要使用鍵盤來完成。有時筆者也會用它來作為背景程式,以免不小心關了Terminal就會把所有運行中的指令都停掉。 我們就馬上來看實際例子吧 前置事項: 安裝Tmux及運行Tmux Debain & Ubuntu 安裝: sudo apt-get update && sudo apt-get install tmux 運行:tmux 進入tmux後,你就會至少有一個分頁,而且不會因為Terminal關閘而中斷 用法一: 建立兩個分頁,並切換 增加分頁: 先按 “Ctrl + b” (前置鍵),再按”c” (create) 切換分頁: 在多於一個分頁的情況下,先按 “Ctrl + b” (前置鍵),再按”n” (next) 用法二: 同一個分頁中,建立左右並排的窗口 增加水平窗口: 先按 “Ctrl + b” (前置鍵),再按 “ (雙引號) 切換窗口: 在多於一個窗口的情況下,先按 “Ctrl + b” (前置鍵),再按方向鍵左或右 用法三: 回到前一個tmux session中 因為不小必關閉了terminal,又或是remote ssh中,ssh斷線後,需要回到之前的工作狀態 未進入tmux 的狀態下:tmux attach 要留意tmux 可以有很多個session,要去到指定的session,就要為session命名。但這個不是筆者常用的情境,原本多個分頁已經很夠用,還要多個session,會很混亂。但不排除它在某些情況下有特別用途,有興趣的朋友可以自行挖挖看。 進階: 回頭看過去的terminal screen output 在現代的Terminal中,原本按滑鼠滑輪向上滾,就可以看到過去的資訊,但tmux下反而不行,所以我們需要進入特殊模式 進入Copy Mode: 先按 “Ctrl + b” (前置鍵),再按 [ (開括號中括號) 向上翻頁: 上方向鍵或PageUp 離開Copy Mode: Copy Mode中任何時候按”q” 進階: 複制貼上 進入Copy Mode: 先按 “Ctrl + b” (前置鍵),再按 [ (開括號中括號) 選擇範圍: 移到需要複制的文字起點,“Ctrl + Space” ,然後再移動到結束點,再按”Ctrl + w” 複制 貼上: 離開Copy Mode後,再按”Ctrl + b” ,然後 ] (關括號中括號) 進行貼上 進階: 複制貼上2 某些情況下,我們不允許使用“Ctrl + Space” 或 ”Ctrl + w”,因為它們可能跟系統的組合鍵有衝突,所以需要改為單鍵。 讓tmux使用類似vim的操作模式: echo “set-window-option -g mode-keys vi” >> ~/.tmux.conf 關掉所有使用中的tmux,重開tmux 進入Copy Mode: 先按 “Ctrl + b” (前置鍵),再按 [ (開括號中括號) 選擇範圍: 移到需要複制的文字起點,按單鍵“Space” ,然後再移動到結束點,再按”Enter” 複制 貼上: 離開Copy Mode後,再按”Ctrl + b” ,然後 ] (關括號中括號) 進行貼上 筆者常用的功能就這些,有興趣的朋友可以再深挖一下。 Reference https://tmuxcheatsheet.com/

【香港。大嶼山】§打卡 美食 下午茶§ 大澳文物酒店 Tai O Lookout ~ 大自然與文物結合 山丘上的玻璃屋餐廳
走遍世界
80後愛旅行✈️・2024-11-23

大澳文物酒店 (Tai O Heritage Hotel) 前身為大澳警署,位於香港大嶼山大澳的小丘上。 酒店是由建於1902年的舊大澳警署活化並翻新而成,共設有9間雅致客房。 而今次要去的玻璃屋頂餐廳 Tai O Lookout 就位於位於酒店一樓,前身為昔日水警監視海盜之用,餐廳亦因此而命名。 大澳文物酒店由建於1902年的舊大澳警署活化而成,被古物諮詢委員會評為二級歷史建築。 以往用作照明海面以作巡視用途的探射燈。 整個建築群用地面積約為981平方米,由三個部份組成: 一座兩層高的主樓及附屬建築,以及其後增建的一層高樓房,均是典型的殖民地風格建築。 目前大澳文物酒店共設有9間雅致客房, 酒店客房及套房均根據水警駐守時期海軍的官階名稱、海軍巡邏艇及大澳著名景點命名,體現舊警署的歷史及大澳漁村的特色。 經過主樓的酒店客房,往上一層就會去到大澳文物酒店的餐廳「Tai O Lookout」 Tai O Lookout Tai O Lookout 是玻璃屋頂餐廳,保留了警署原有的天台看守塔,前身為昔日水警監視海盜之用,餐廳亦因此而命名。 餐廳門口有兩座設計精美的Lego建築 玻璃室設計改建為雅致的餐廳,殖民地風格的典雅裝潢, 以及沿用了China Tee Club饋贈的精緻曲木傢俱,閒賞翠綠樹景及南中國海的優美景致。 「Tai O Lookout」內的桌椅都由中環畢打街的「 China Tee Club」捐贈 餐廳的餐紙亦很有心思,是大澳的玩樂地圖,旅客可以跟著這張 Amazing Map 到處遊玩! 14:30-17:00下午茶時段的餐牌 我們點了2個下午茶套餐,分別是 大澳蝦醬豬扒包配薯條 HKD 118 另加 HKD 10 配一杯紅樹林特飲 紫貝天葵芝士餅 HKD 108 另加 HKD 10 配一杯紅樹林特飲 大澳的蝦醬很有名,來到大澳當然要試下地道的味道。 本來有點擔心鹹蝦醬配豬扒包,味道會很奇怪,怕會把豬扒包變得鹹鹹鯹鯹的,但吃著竟然不會耶!完全不會覺得不搭 2個套餐完全可以吃飽兩個人,加一後埋單也只是 HKD 270.6,就可以在這麼有特色,又能看到大海的地方享用午餐/下午餐 很推薦大家來這裡感受一下 大澳文物酒店 Tai O Lookout Tai O Lookout:香港大嶼山大澳石仔埗街 大澳文物酒店一樓 (852) 2985 8383 早餐 8:00am – 11:00am 午餐 11:00am -2:30pm 下午茶 2:30pm – 5:00pm 晚餐 6:00pm – 10:00pm https://www.taioheritagehotel.com/tc/dining/tai-o-lookout/ 檢視較大的地圖

Git Co-Work Flow
科技新知
MacauYeah・2023-06-23

Git Co-Work Flow 雖然git面世已很久,但相當一部份澳門朋友都是solo man,很少合作寫code,對git branch始終都有些恐懼。所以這次來解召一個基本原則,至少你不會爛了code救不回來。 若然大家未熟悉git,初次利用git合作寫program,請盡量減少使用共同分支(branch),可以極大地減少問題。 第一個大原則 - 建立一條自己分支 在一個repo中,為自己建立一條分支(branch),可以減少Remote repo中有人比你先commit,而令你push失敗的情況。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 除非你的隊友故意你用的分支名先commit,又或者你自己有幾台電腦,幾台一起做改動。不然push 應該不會有問題。 第二個大原則 - 用fetch取代pull 很多人在取用Remote Repo的更新時,都會使用pull。但pull其實是fetch及merge的混合,而且merge還要考慮source branch是那條分支的問題,若然大家都有一條獨立branch,那麼這個無腦pull並不存於每人只有一台電腦下的多人協作中。 fetch的過程中,還可以加入參數--prune,順便依照Remote Repo的指示,同步刪掉本機中一些不再存在的origin/branch。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 第三個大原則 - Merge前先Commit 經過前述fetch後,其實他人的改動並未加入自己的分支中,必需經過merge才會出現。但並不是沒有conflict就無腦merge。 假若自己有改動,未commit,應該老虎蟹都先commit。這是為了在merge後,還有機會可以無腦reset,回到之前那個commit。這就像是做任何更新前,先做backup。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 第四個大原則 - 由某個特定的人來管理master或main branch main branch(以前叫master branch),是他人下載時的預設分支,也是Github、Gitlab的預設顯示分支。所以該分支存放著的source code,應該在代表信心度比較高。 在協作的環境中,每人都有自己分支,那就代表要有一位人員做管理,他負責checkout main, 然後合併其他已驗證的分支。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 在某些比較嚴僅的環境中(例如Github、Gitlab),main分支可能會被系統機制鎖定,必需通過系統內鍵的Pull Request,才能通過審核,合併到main。另外,也有一些關於開發上的Git workflow,主要針對功能管理、版本發佈、錯誤修正等控制。有機會再為大家介紹。 希望以上的流程,可以有效且容易地讓大家協作。如果有任何command錯誤或更新,都可以經Github Pull Request通知筆者。

視覺味覺雙重享受!細嚐「山里」日本餐廳的正宗的懷石料理
專題報導
Cheers!・2018-05-23

榮獲2018年米芝蓮「餐盤」的「山里」日本餐廳位於澳門大倉酒店28樓,由行政總廚林彰主理,提供正宗的日式佳餚包括壽司、懷石料理、時令海鮮等,而且更會按季節的食材而推出每月特選午餐。 是次推出的「山里迷你會席」就以日本春夏當地時令食材入饌,套餐共有六道菜,包括前菜、鮮魚刺身、烤魚、蓋物、主食及甜品。 餐廳以時尚、優雅的和式設計為主,還可飽覽銀河內園全景。 專業的廚師們為客人精心烹製美味佳餚。 前菜是富山產的螢光魷魚配醋物,螢光魷魚味濃而鮮,旁邊的季節菜選用了山葵葉,上面灑上芝麻,鮮爽開胃。 鮮魚刺身則選用了長崎縣的吞拿魚及千葉縣的平政魚,兩款刺身十分鮮美,油香豐富,最特別是Wasabi是用鯊魚皮現磨出來,沒有平時Wasabi辛辣的味道,配合刺身一起食能令刺身的鮮味更突出。 最令人期待就是餐廳推薦的烤鮮魚配酒粕味噌,烤魚選用櫻花鯛,上面舖了一層酒粕味噌,酒粕是釀製清酒時的剩餘物,蘊含多種營養素,搭在一起有助去除魚的腥味,還可提升魚肉的甜味,令烤魚的層次更豐富。 接著出場的是煮竹笋和白飯魚配雞蛋,一開蓋已經香氣四溢,來自京都的竹笋十分清甜,而白飯魚與雞蛋口感滑嫩綿密,兩者融合一起無可挑剔。 另外還有主食的京都式烤鯖魚、平政魚腩及吞拿魚壽司,配京都紅麵豉湯享用。 最後的甜品有超多汁的靜岡蜜瓜、九洲橙及德島奇異果,為午餐劃上了完美的句號。 所有菜式的擺盤精緻,令人賞心悅目,而每一道菜都能體現廚師們精湛的烹飪技術,使客人能品嚐出食物的天然之美,而視覺、味覺都能有極致的享受。 套餐可另加 $150配清酒享用,美食加清酒,別有一番風味。 山里迷你會席 價錢:$580/位(另加收 10% 服務費) 山里日式餐廳 地址:澳門大倉酒店28樓 營業時間:12:00-15:00 及 17:30- 22:00 (周一休息) 電話:(853) 8883 5127
 網址:https://www.hotelokuramacau.com/zh-hant/taste/yamazato