[踩雷紀錄] Http 套件 OkHttpClient 非預期 retry
最近公司的產品發生一件神秘的事情,明明從 log 或是程式碼來看我們都只有發出一次的 http 請求,但合作的廠商卻說我們重複送了一次一模一樣的請求,導致有幾百筆訂單被重複送出,又因為錯誤處理沒...
2024 , Apr 09
最近公司的產品發生一件神秘的事情,明明從 log 或是程式碼來看我們都只有發出一次的 http 請求,但合作的廠商卻說我們重複送了一次一模一樣的請求,導致有幾百筆訂單被重複送出,又因為錯誤處理沒...
2024 , Apr 09
之前寫過 JPA 連接多資料庫來源的做法,這次要來寫的是讀寫分離的設定,實際上也可以透過多資料庫來源的做法來操作,不過使用上會變成讀與寫需要使用不同的類別,理想上是希望可以只套用到方法,這樣可以...
2023 , Aug 09
JPA 的功能強大,能利用介面名稱以及回傳類型建立相應的查詢語句,如果不夠用還可以透過 JPQL 自行組裝,不過最近遇到需要取用查詢結果排序後第一筆的時候遇到一些困難,紀錄一下解法
2023 , Jan 28
之前有介紹過 QueryDSL 這個好用的套件用來做到複雜查詢以及自動匹配 filter 的功能,後來發現其實 JPA 也有內建對於複雜查詢的使用框架,雖然自己本身還是比較常用 QueryDSL...
2023 , Jan 28
JPA 是 Spring boot 現行架構下最流行的 ORM 框架,雖然大部分的情況我們都可以直接使用 JPA 提供的介面來進行操作,不過有時候還是會有一些特殊的客製化需求要處理,這次的問題發...
2022 , Oct 13
在 spring boot 的框架加護之下,很多的功能都可以透過簡單的 annotation 啟用,像是 @Transactional 或是 @Cacheable 都是常會用到的,不過這些功能卻...
2022 , Oct 05
當服務部署到機器上運行時,我們需要確認一下服務的狀態,簡單的做法就是開個 API 給外部打來確認,Spring boot 則已經有包好的套件可以用了,簡單來介紹下 Actuator 的使用,並在...
2022 , Sep 21
最近一個新的專案需要同時動用到兩個不同的資料庫,雖然是同一台機器,但是 JPA 的連線要包含資料庫資訊,也就是說需要可以支援一個以上的資料庫連線才行,這邊就簡單講解下怎麼設定
2022 , Sep 12
撰寫系統不乏用到 Enum 的場景,但是通常不會希望直接存 Enum 的名稱在資料庫中,雖然可能可以增加資料庫的可讀性,但一方面也增加儲存空間的浪費,一方面可能需要儲存的是值,因此簡單紀錄下 J...
2022 , Aug 18
撰寫程式的時候常常會有一些部分是重複的,這時候不想要重寫一遍 code 或是複製貼上的話,就需要把共用的部分抽離出來,而 spring boot 本身其實就是一個這樣的懶人包的概念,透過各種 s...
2022 , Jun 07
依賴注入可以幫助日漸複雜的專案達到解耦合的效果,透過介面的注入讓重構以及測試可以更好進行,但要自己手動撰寫依賴注入十分費工,而且程式碼注定不會太好看,這時候就讓我們來利用一下框架之力,Wire ...
2022 , May 27
使用 gin 進行後端開發上也是需要測試的,但沒有辦法簡單的使用 unit test 達到目的,一個完整的 http 請求流程會經過各種 middleware,為了測試這個情況,我們要來進行 g...
2022 , May 21
開發一段時間後,系統發展日漸複雜,常會有重構或是修改的需求,這時候若是任意修改有可能會導致相關功能出現副作用,這時候確保測試的撰寫就很重要了,這篇就來簡介一下 golang 的 unit tes...
2022 , May 21
撰寫系統的時候錯誤處理是非常重要的一環,系統的穩定度基本取決於對於錯誤處理是否全面,好的錯誤處理也可以產生適當的錯誤訊息,讓 Debug 更加容易,golang 在錯誤處理這方面跟其他語言的設計...
2022 , May 11
前篇介紹了 Spring Boot 的 Migration 用法,也簡介了 Migration 的用途,那這篇就介紹了在 Golang 中使用 golang-migrate 實現 databas...
2022 , Apr 27
在撰寫後端程式的時候時常需要搭配資料庫的使用,而功能上一定程度也與資料庫是有掛鉤的,那當程式碼有更動的時候資料庫理所當然需要更新,這個更新的機制就被稱為 Migration,可能是從無到有的全部...
2022 , Apr 26
後端程式不免會牽涉到資料庫的 CRUD,這次我們將試著介紹一個常見的 Golang ORM 函式庫 gorm,介紹一些基本操作還有設定,以及一些自己的使用習慣與心得
2022 , Apr 26
程式部屬時常因執行環境的不同,而需要套用不同的設定,大多數情況我們是透過環境變數來設定,像是 Spring boot 內建讀取 application.yml,或是 Node.js 的 dote...
2022 , Apr 25
在撰寫 API server 的時候一定會遇到參數驗證的問題,這次會介紹兩種常見的套件 ozzo-validation、go-playground/validator 看看各自是如何實踐在 go...
2022 , Apr 03
最近在新的機器上重裝 golang 遇到一些問題,沒辦法正常使用,這次踩的雷主要是對於 Golang 環境變數的不了解,所以這邊就來看看 golang 環境變數的相關問題
2022 , Mar 22
Gin Gonic 是一個 Golang 非常好用也十分著名的 Http server 框架,這篇簡單說明一些基本用法與操作
2022 , Mar 17
丄篇簡單講了 Golang 的基本語法,以及一些簡單的範例 code,這篇要來看看 Golang 比較具有特色的一些語法,也是 Golang 強大功能的一些重點
2022 , Mar 16
最近工作上使用 Golang 開發有一段時間了,在幾個周邊的小服務上慢慢使用 Golang 來取代 Java,對於 Golang 在小服務撰寫上的體驗是十分好的,可以達到快速開發、快速上線的效果...
2022 , Mar 15
Directive 可以想成是一種對於 Schema 的額外修飾,可以用來實現一些額外的檢查或是資料的轉換,有種額外插件的感覺,除了在 Server 端可以實現之外在 Client 端也有相應的...
2022 , Jan 10
還記得在第一篇的時候介紹到的 Field Resolver,當 Client 有用到某個 Field 的時候才會去執行取得資料,但是當回傳是一個 List 的時候會發生每個 Element 都要...
2022 , Jan 07
上一篇講到了基本的 GraphQL 的 Query 操作以及 Field Resolver 的用法,本篇就來談談對資料進行修改用的 Mutation,以及自定義基本型態,在 GraphQL 也被...
2022 , Jan 06
GraphQL 原先是由 Facebook 內部開發,後來開放出來給大家一起使用的一種標準,目的是更簡潔有規劃性的操作 Query,跟 RESTful API 比較起來,目前感受到最大的優點是可...
2021 , Dec 30
軟體在開發時期常會一直疊代更新,為了確保功能正常並保證出產品質,測試是不可少的,而單元測試也是其中最小單位也較好實作的,後端的單元測試最基本要確保 API 的正常運作與回覆,深入一點要確保每個 ...
2021 , Dec 19
最近的一個案子需要處理大量的 XML 資料,才發現 Java 在這方面的 API 使用起來不是那麼方便,跟 Json 的處理相比大部分都不是很直覺,趁著還有點心得的時候趕緊寫下筆記,期望能將 X...
2021 , Nov 26
這次要介紹的 Filter 是用來針對 Http 的請求與回應在途中攔截下來做一些處理,運作邏輯上有一點像先前寫過的 AOP,但 AOP 是以 Method 為視角去攔截,而 Filter 則是...
2021 , Nov 22
前幾篇說到基本的 Validation 該怎麼使用,不過實際情況下的商業邏輯往往是無比複雜的,一些內容的驗證可能不是這麼簡單的規則就可以帶過了,因此這篇就來說明下,怎麼在 Validation ...
2021 , Oct 28
API 參數傳入 List 或是 Set 的例子也是屢見不鮮,但卻發現一般的 Validation 作法沒有辦法驗證到 List 的內容,不確定是不是 Bug,但還是必須要想點辦法來解
2021 , Oct 21
上篇介紹到 spring boot 簡單好用的參數驗證機制,但一般 API 常會分成 Create 跟 Update 兩種功能,兩種功能提供的參數大致上都會相同但會有一些驗證上的差異,如果要為了...
2021 , Oct 21
Api 的請求參數一般都需要做合法性的驗證,每個參數都必須確保沒有問題,才不會導致有預期外的資料出現,導致系統發生不可預期的結果,Spring boot 強大的生態下 Validation 的機...
2021 , Oct 20
spring boot 提供了強大的 JPA 操作,用簡單的宣告就可以組合出大多的查詢語法,但有些較複雜的操作還是得寫 JPQL 的語法,雖然也是很便利強大,但還是希望能有更模組化的方法,Que...
2021 , Aug 16
標題看起來有點繞口,不過這個問題倒真的令人困擾,主要困擾在於開發時完全沒有問題,但是到了 build 成 jar 之後,狀況才會出現,也造成要除錯十分麻煩,必須改完 code 然後 build ...
2021 , Apr 27
最近一個案子中在 web server 有用到 FTP 的功能,而在開發中卻發現在本地測試時能夠正常運作的 FTP 功能,部屬到線上平台之後卻通通失靈了,查了一下才知道 FTP 有分為兩種不同的...
2021 , Mar 12
用 Spring boot 撰寫後端時,常會有事前檢查、事後日誌的需求,若在每個 Api 中都做一次那就太蠢了,於是這邊介紹一下 Spring boot 中十分方便的 AOP 機制,可以輕鬆達成...
2020 , Nov 30
後端開發中也常會碰到定期任務的需求,這時候 spring 的 Scheduled 就可以派上用場啦,也筆記一下 cron 表示式的內容,不然每次寫都搞不太清楚
2020 , Nov 24