在Java使用Spring或是Hibernate時,使用OneToMany、ManyToMany來標注Entity Class非常方便,可以輕鬆處理外來鍵與外來資料表的問題。但偶爾使用getXXX()方法要讀取外來資料表的時候,可能會遇到Hibernate報錯說「org.hibernate.LazyInitializationException: failed to lazily initialize a collection」,本篇文章將解析為什麼會發生這種問題,以及要怎麼解決它。
Spring Data JPA與Hibernate報錯failed to lazily initialize a collection
使用Spring Data JPA建立公版的DAO、Repository樣板
Spring Data JPA是一個非常方便的資料庫Connection與Mapping的框架,它可以幫你建立資料表、添加資料表的欄位、維護連接池、將Java物件轉換為Table資料。有時候我們會希望自己建立一個我們的公版interface,讓他繼承某一個Repository再添加一些方法,然後之後的DAO interface再繼承我們的公版interface,可以簡化更多程式碼。
整合Spring Boot、Nginx反向代理、Linux Systemd系統服務
我常用的一個場景是一台Linux底下有多個Spring Application,可以透過Linux system daemon控制他們,然後使用Nginx的反向代理產生唯一對外窗口,讓外界透過Nginx與Spring Application溝通。
實測 Spring Boot 中多個 Properties 設定的覆蓋順序
Spring Boot 同一個設定值可以從啟動參數、環境變數、System Property、application.properties、application-{profile}.properties 等多個來源讀取。本文整理常見來源的優先順序,從最高的命令列參數到最低的預設 properties,以及 OS 環境變數、SPRING_APPLICATION_JSON、jar 外與 jar 內檔案差異等容易踩坑的細節,幫助開發者搞清楚到底是哪個值生效。
指定 Spring Boot 執行環境的多種方式
Spring Boot 專案在開發、測試、正式環境通常需要不同的設定值,這篇文章整理 application-{profile}.properties 命名規則、SPRING_PROFILES_ACTIVE 環境變數、spring.config.location 與 additional-location 差別,以及 Spring Boot 2.4 之後新增的 spring.config.import、profile groups、multi-document files 等多種指定 profile 的方式。