協助處理Spring Boot批次作業開啟太多資料庫連線問題

正確設定Spring Boot連線很重要

前情提要

上週接到一個工作任務,專案同仁來跟我說他們遇到一個問題,客戶那邊的DBA發現某套系統的批次作業一跑起來,批次作業得去撈資料庫資料,每次一跑起來就會開出很多條Connection,數量多到DBA受不了,因此請專案同仁處理這個問題。此時剛完成一項工作任務的我,剛好有一點時間,因此請我幫忙查看此問題。

問題發現

楊藝一聽到這個問題就知道,一定是者專案的Spring Boot沒有設定好,因此完全沒有使用到Connection Pool的機制,查看問題果不其然,專案並未使用Spring Boot預設會Auto-configuration的方式進行資料庫連線配置,在application.properties上自行定義了資料庫連線相關資訊,在自行產生DataSource的Bean,當中DataSouce僅從application.properties拿去連線相關訊息,之後就把這個DataSource回傳回去…因此這個是一個非常乾淨的DataSouce,只要一呼叫getConnection()方法,就會產生一條新的資料庫連線…

處理方式

這邊我選擇的處理方式就是…將一切回歸的正確的方向,按照Spring Boot的方式,正確的設定DataSouce相關資訊以及Connection Pool,問題就可以解決了,但是….我相信會問這個問題的專案同仁,大概對Spring Boot不夠熟悉,因此得做個測試給專案同仁看。因此我選擇了先將spring-boot-starter-actuator依賴加入,這樣我才能夠將Spring Boot內的Connection Pool使用情況展示給專案同仁看,接著撰寫測試類別來驗證我的設定方式確實使用了Connection Pool。

最後採取方案

驗證方法可行之後,專案同仁帶我去找專案Leader,說明我看到的情況跟處理方式,對方相當認同,不過因為我才加入專案兩周,對客戶系統需要的Connection Pool的使用量及相關設定並不熟悉,所以請專案同仁確定好相關設定的參數值,再來進行設定,此案就可以結案了。