Spring Boot 2.7.0についてメモ
はじめに
先日、Bootの2.7が出ましたね。今回もまとめておこうと思います。ここでは私が気になるところについてまとめて、ものによっては簡単に動かしてみたいと思います。すべての変更点に関しては
そういえば昨年のSpring Oneの記憶なんですが、2.7.xは2系の最後のリリースになるんですかね。
2.5系のOSSサポートも終わったみたいですししっかり最新のバージョンについていって3系に挙げれるようにしたいですね。
諸々みてみる
環境
今回の動作環境
$ uname -srvmpio Linux 5.14.0-1038-oem #42-Ubuntu SMP Thu May 19 05:03:08 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal $ java --version openjdk 18 2022-03-22 OpenJDK Runtime Environment (build 18+36-2087) OpenJDK 64-Bit Server VM (build 18+36-2087, mixed mode, sharing) $ mvn -v Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0) Maven home: /home/hogehoge/.sdkman/candidates/maven/current Java version: 18, vendor: Oracle Corporation, runtime: /home/yuyahirooka/.sdkman/candidates/java/18-open Default locale: ja_JP, platform encoding: UTF-8 OS name: "linux", version: "5.14.0-1038-oem", arch: "amd64", family: "unix"
おおまかな変更点
- InfoエンドポイントでJava Vendorの情報を取得可能に
- @SpringBootTestのプロパティ優先度の変更
- OkHttp4へ変更
- Spring for GraphQL 1.0のオートコンフィグとメトリクスのサポート
- Jackson Mixinsのサポート
- PEM-encoded certsを利用したWeb server SSLの設定
- Cloud Native Buildpacks利用時にPodmanが利用可能に
- Cache2kのサポート
- 依存のアップグレード
プロジェクトの作成
今回のプロジェクトはInitializrから以下の設定で作成しました。
各変更点のざっくりまとめ
それでは各変更点についてざっくりまとめていきます。
InfoエンドポイントでJava Vendorの情報を取得可能に
JavaInfoContributor
が改善されて、Java Vendorの情報を取れるようになりました。
まずは/info
エンドポイントの公開とInfoContributor
の有効化を行いましょう。
application.properties
に以下の設定を追加します。
management.endpoints.web.exposure.include=info management.info.java.enabled=true
cURLで/info
えんどポイントにアクセスすると、以下のように情報はJasonのvendor
オブジェクトのname
プロパティに含まれます。
$ cur -sl localhost:8080/actuator/info | jq . { "java": { "version": "18", "vendor": { "name": "Oracle Corporation", "version": null }, "runtime": { "name": "OpenJDK Runtime Environment", "version": "18+36-2087" }, "jvm": { "name": "OpenJDK 64-Bit Server VM", "vendor": "Oracle Corporation", "version": "18+36-2087" } } }
@SpringBootTestのプロパティ優先度の変更
@SpringBootTest
もしくは、@TestPropertySource
で追加できるプロパティソースがコマンドラインの入力で追加できるプロパティソースの優先度より上になりました。
これらの両方を利用して設定を行っている場合は変更が必要かもしれません。
OkHttp4へ変更
OkHttp3のサポート終了により、2.7からはOkHTTP 4が利用されるようになりました。このアップグレードによりOkHttpの設定を行うプロパティもokhttp3.version
からokhttp.version
に変更されています。
Spring for GraphQL 1.0のオートコンフィグとメトリクスのサポート
2.7からSpring for GraphQLのstarterが用意されています。starterはspring-boot-starter-graphql
から利用できます。
ドキュメントによるとこのstarterを利用してWebで公開する場合以下のstarterのいずれかを追加で依存に入れてやる必要があります。
spring-boot-starter-web
spring-boot-starter-websocket
spring-boot-starter-webflux
spring-boot-starter-rsocket
より詳細な情報は各種設定に関してはこちらをご覧ください。
Jackson Mixinsのサポート
2.7からはJacsonMixinsがサポートされます。Jackson Mixinsを利用することでオブジェクトがJacksonに直接依存することなくシリアライズ/デシリアライズすることができます。Mixinの登録は@JsonMixin
アノテーションが付与されたMixinの抽象クラスが自動的に発見され行われます。
例えば以下のようなレコードクラスを用意します。
User.java
public record User(String userId, String password) {}
このレコードクラスに対してMixinするための抽象クラスを用意します。
このクラスには@JsonMixin
アノテーションを付与しタイプにシリアライズ/デシリアライズ対象のPOJOを指定します。
更にポイントはpassword
フィールドには@JsonIgnore
アノテーションを付与しプロパティを無視するようにします。
UserJacksonMixin.java
import com.fasterxml.jackson.annotation.JsonIgnore; import org.springframework.boot.jackson.JsonMixin; @JsonMixin(type = User.class) abstract class UserJacksonMixin { String userId; @JsonIgnore String password; }
このUserレコードクラスを/user
のGETアクセスで取得できるようにハンドラーを追加します。
@SpringBootApplication @RestController public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @GetMapping("/user") public User getUser(){ return new User("henoheno", "password"); } }
cURLでリクエストを送ると以下のようにpassword
フィールドが無視されたJsonが取得できます。
$ curl -s localhost:8080/user | jq . { "userId": "henoheno" }
PEM-encoded certsを利用したWeb server SSLの設定
server.ssl.certificate
やserver.ssl.certificate-private-key
プロパティを設定することでPEM-eoncordedのSSLを設定できるようになりました。
設定方法やより詳細な情報はこちらをご確認ください。
Cloud Native Buildpacks利用時にPodmanが利用可能に
Mavenに以下の設定を追加することで、Cloud Native Buildpacks利用時にDocker Engineの代わりにPodmanをつかったビルドを行えるようになりました。
<project> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <docker> <host>unix:///run/user/1000/podman/podman.sock</host> <bindHostToBuilder>true</bindHostToBuilder> </docker> </configuration> </plugin> </plugins> </build> </project>
Gradleでの設定はこちらをご確認ください。
Cache2kのサポート
Cache2kのオートコンフィグなどのサポートが入りました。設定はCache2kBuilderCustomizer beenを通して行うことができます。設定の詳細はこちら をご確認ください。