Open10

[WIP] Spring Boot 3 で変わったこと

mola1129mola1129

Spring Boot 3 で変わったこと

依存関係

  • Java 17 or Java 19 をサポート(Java 8 , Java 11 は不可)
  • GraalVM >= 22.3
  • Native Build Tools Plugin >= 0.9.17
  • Spring Boot 6 に依存
  • 他の Spring 系ライブラリのアップデート (Spring AMQP, Spring Batch, etc...)
  • 全ての依存における Java EE -> Jakarta EE API への移行 (可能な限り Jakarta EE 10 互換の依存を選択)
  • サードパーティライブラリを可能な限り最新の安定版にアップデート
  • GraalVM Native Image への変換をサポート
  • Log4j2 のサポートが強化
  • @ConstructorBinding の検出を改善
  • Micrometer の更新
  • Prometheus のサポートが強化
  • Spring Data JDBC の Auto Configration を改善
  • Apache Kafka における Async Acks の有効化
  • 新しい Elasticsearch Java Client の Auto Configration を導入
  • JdkClientHttpConnector の Auto Configration を導入
  • @SpringBootTest の改善

非推奨

  • 細かいので記載しない

参考: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes

mola1129mola1129

Java 11 -> 17 の更新で気になったもの

JEP 一覧

306: Restore Always-Strict Floating-Point Semantics
356: Enhanced Pseudo-Random Number Generators
382: New macOS Rendering Pipeline
391: macOS/AArch64 Port
398: Deprecate the Applet API for Removal
403: Strongly Encapsulate JDK Internals
406: Pattern Matching for switch (Preview)
409: Sealed Classes
394: Pattern Matching for instanceof
395: Records
361: Switch Expressions
378: Text Blocks

306: Restore Always-Strict Floating-Point Semantics

  • 浮動小数点の処理を全てstrictfpを付けた動作と同様にする
  • Java SE 1.2 より前の動作に一致する
  • 誤差に影響される数値計算ライブラリの開発を容易にする
  • 元々厳密な浮動小数点の計算はCPUの負荷が大きかった(x87 FPU)
  • そのため、strictfpを付けたときにだけ厳密な計算を行い、デフォルト動作はCPU依存にした
  • IntelとAMDが共にSSE2をサポートした
  • 今のCPUは厳密な計算を大きな負荷なく実行できる
  • なので、デフォルト動作をstrictfpと同一にする
  • strictfp修飾子は、IEEE 754に従って浮動小数点数の処理をする
  • strictfpが意味を持つのは、演算の途中でオーバーフロー or アンダーフローが起こるとき?
  • サンプルコードが欲しい

356: Enhanced Pseudo-Random Number Generators

  • 新しいインターフェース RandomGenerator の導入
  • 疑似乱数生成(PRNG)アルゴリズムの使用と追加を容易にする
  • Stream APIをサポートする
  • java.util.Random, SplittableRandom, SecureRandomのリファクタリング
  • 実際にコードを試してみる

382: New macOS Rendering Pipeline

  • macOS 用の Java 2Dレンダリングパイプラインを新たに実装
  • 非推奨の OpenGL API -> Metal API に変更したもの
  • 内部的な変更であり、Java 2D APIの変更はない

391: macOS/AArch64 Port

  • JDKをMac OS(AArch64)でも実行可能とする
  • つまりAppleSilicon(M1など)への対応
  • Apple が自社製品のCPUをx64 -> AArch64 へ移行することを発表した
  • Rosetta2 を使えば macOS(x64) ビルドは実行可能だが、パフォーマンス上の懸念がある
  • JEPとしてはJava17で導入されているが、Java17以前もM1対応版があるのは何故?

398: Deprecate the Applet API for Removal

  • 削除するために、Applet API を非推奨とする
  • 殆どのブラウザベンダが、Java Browser Plugin のサポートを削除 or 削除を予定している
  • Java9から非推奨ではあったが、これは削除のためではなかった
  • forRemoval = true のフラグが付与された

403: Strongly Encapsulate JDK Internals

  • 内部APIの使用を禁止とする(sun.misc.Unsafeのような一部の例外を除く)
  • Java16時点でこの動作がデフォルトではあったが、illegal-accessオプションを使用することで緩和可能だった
  • 今回の変更でillegal-accessオプションが削除される
  • セキュリティ上の問題とメンテナンスコストが軽減される

406: Pattern Matching for switch (Preview)

409: Sealed Classes

394: Pattern Matching for instanceof

395: Records

361: Switch Expressions

  • JDK 14

378: Text Blocks

https://openjdk.org/projects/jdk/17/
https://qiita.com/nowokay/items/ec58bf8f30d236a12acb
https://www.baeldung.com/java-17-new-features
https://mkyong.com/java/what-is-new-in-java-17/
https://qiita.com/mod_poppo/items/0126934835f9e7988b2d
https://java-code.jp/117
https://openjdk.org/projects/jdk/17/jeps-since-jdk-11