淺談Spring Boot 3與2的差異(一)

劉書含 Hailey Liu 2023/04/27 15:10:01
10752

前言

在2022年11月24日 Spring Boot 版本大升級到3.0.0,是 Spring Boot 近幾年來算是滿大的調整,因此本文主要來聊聊相較於 2 新增及修改的功能簡單介紹。

官方建議要從舊版本升級的不要直接升級成 3 ,而是先從 2.X.X 升級到目前的 2.7.6 再升級到 3 ,會比較容易更新。

 

開發環境

  • Windows 11
  • Spring Boot 3.0.0
  • Maven 3.6.3
  • GraavlVM CE 22.3  - java 17 (JDK)
  • Docker (zipkin 使用)

 

Maven pom.xml

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.0.0</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>17</java.version>
	</properties>

 

版本差異

Spring Boot 3 版本最低限制:

• Spring Framework 6

• Java 17

• Tomcat 10

• Lombok 1.18.22+

• Maven 3.5

• Gradle 7.3

Spring Boot 3 與 2 的差別:

移除的依賴

  • Atomikos

  • EhCache 2 (已調升成  EhCache 3)

  • Hazelcast 3

  • Apache ActiveMQ

 

Jakarta EE 

Spring Boot 3 使用 Jakarta EE 9/10,在 Jakarta EE 9 將原先 javax 的 package 全部都改成 jakarta package,如下面範例:

// Spring Boot 2
import javax.persistence.Entity;

// Spring Boot 3
import jakarta.persistence.Entity;

Jakarta EE 9 若要使用第三方依賴所需要的最低版本:

  • Hibernate 6.1
  • Hibernate Validator 8.0
  • SLF4J 2.0
  • Tomcat 10
  • Thymeleaf 3.1.0.M2

 

GraalVM

Sprong Boot 3 開始引用了 GraalVM Native Image,與原先 JVM 相比 ,啟動效率快且打包成占用空間極小的 Image。

只是要使用 GraalVM 需使用指定的JDK,且需要版本  GraalVM 22.3 + 和 Native Build Tools Plugin 0.9.17 + 才能建構 Native Image,可以輸入 java -version 確定自己本機現在的版本。

Maven 可以直接執行 mvn -Pnative native:compile 編譯 Image , 文件會生成在 /target 底下

特別注意: Windows 環境會產生無cl.exe的報錯,目前查出的唯一解法需下載 Visual Studio 2019 裡的 cl.exe 才能執行,這邊就不特別另外示範

Mac 的部分則可以直接打包執行,發現啟動時間真的跟以前比起來快了好幾倍

Observability

Observability是以下三個組合而成,也取代了像 Spring Cloud Sleuth 的存在:

  • Logging
  • Metrics 
  • Traces

Maven pom.xml

<!--		Observability-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

準備 zipkin ,使用 docker 補助(需先下載Docker)所以需要一個docker-compose.yml:

version: "3"

services:

  zipkin:

    container_name: zipkin

    image: openzipkin/zipkin

    extra_hosts: ['host.docker.internal:host-gateway']

    restart: always

    ports:

      - "9411:9411"

# Zipkin: http://localhost:9411/zipkin/

 application.yml:

management:

  endpoint:

    health:

      show-details: always

  endpoints:

    web:

      exposure:

        include: "*"

  tracing:

    sampling:

      probability: 1.0

執行Docker  application後,先執行 API 取得資料再進到 zipkin http://localhost:9411/  ,就能找到剛剛的紀錄,並看詳細內容

因為篇幅關係這邊只做比較簡單的示範,還有像Observation的使用與介紹,再請到 spring-boot.observability  官網看詳細介紹

以上的範例是直接從 github 範例 下載做練習及研究,有興趣可以看看喔

接續請看  淺談Spring Boot 3與2的差異(二)

 

參考文獻

劉書含 Hailey Liu