Open10
[WIP] Spring Boot 3 で変わったこと
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
GraalVMとは
Spring Framework 6 で変わったこと
参考: https://github.com/spring-projects/spring-framework/wiki/What's-New-in-Spring-Framework-6.x
Prometheus とは
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
JCP とは
Java 関連技術の仕様を標準化・承認するためのプロセスのこと
※ JCP = Java Community Process
JEP とは
JDK の機能強化や関連する取り組みを記述した提案文書のこと
※ JEP = JDK Enhancement Proposal
JEP 一覧: https://openjdk.org/jeps/0