よーぐるとのブログ

技術ネタを中心。私的なことを徒然と綴っていきます。

Spring Native Beta Releaseについて

※ 以前投稿した記事に誤りがあったので投稿し直しています

Spring Native Betaリリース

Spring Nativeとしてリリースされました。まだBeta版(Version 0.9.0)で、spring-projects-experimentalという実験的プロジェクト配下に置かれています。(2020年のSpring IOではSpring GraalVM Nativeと呼ばれていました)

Spring Boot, Spring Cloudなどの各種OSSのNative Imageの作成を行ってくれます。過去にこちらで触れたCloud Native Buildpackを利用したDocker Imageを作成することで、簡単にNative ImageをDockerコンテナで動かすことができるようになりました。

spring.io

github.com

Spring Native を利用したプロジェクトの作成

Spring InitilizrですでにSpring Nativeが入っており、選択することができます。

f:id:yoghurt1131:20210314213930p:plain

また、Spring Nativeの動作範囲外のOSSが入っている場合、HELP.mdにサポート範囲外のため予期せぬ動きをする可能性がある、といった注意文が入ります。

unsupported
Spring Sessionを追加した場合. `The following dependency is not known to work with Spring Native: 'Spring Session'. ` という文言が表示される。

Spring Nativeのサポート範囲

Spring NativeはまだBeta版であるゆえにサポートされている範囲が明記されています。

GraalVM 21.0.0、Javaは8か11、Kotlinは1.3以上となっており、Spring Bootは2.4.3がサポート対象となっています。今後、Spring Bootのバージョンと共に上がっていくと謳っています。 Spring Native 0.9.0はSpring Boot 2.4.3に、Spring Native 0.9.1はSpring Boot 2.4.4に、といった具合です。

また、samples配下のプロジェクトをみてもらえればなんとなくわかりますが、以下のSpring Boot, Spring Cloud プロジェクトがサポートされています。(Spring Cloudは2020.0.1をサポート)

  • spring-boot-starter-actuator
    • WebMvc and WebFlux がサポート対象
  • spring-boot-starter-data-elasticsearch
  • spring-boot-starter-data-jdbc
  • spring-boot-starter-data-jpa
  • spring-boot-starter-data-mongodb
  • spring-boot-starter-data-neo4j
  • spring-boot-starter-data-r2dbc
  • spring-boot-starter-data-redis
  • spring-boot-starter-jdbc
  • spring-boot-starter-logging
  • spring-boot-starter-mail
  • spring-boot-starter-thymeleaf
  • spring-boot-starter-rsocket
  • spring-boot-starter-validation
  • spring-boot-starter-security
    • WebMvc and WebFlux でのログイン、HTTP Basic認証、 OAuth 2.0をサポート。RSocketはサポート対象外。
  • spring-boot-starter-oauth2-resource-server: WebMvc and WebFlux are supported.
  • spring-boot-starter-oauth2-client
    • WebMvc and WebFlux がサポート対象
  • spring-boot-starter-webflux
    • Nettyのみサポート
  • spring-boot-starter-web
    • Tomcatのみサポート
    • HTTPSで利用するには-enable-httpsフラグが必要
  • spring-boot-starter-websocket
  • com.wavefront:wavefront-spring-boot-starter
  • spring-cloud-starter-bootstrap
  • spring-cloud-starter-config
  • spring-cloud-config-client
  • spring-cloud-config-server
  • spring-cloud-starter-netflix-eureka-client (Java 11 のみ)
  • spring-cloud-function-web
    • HTTPSで利用するには-enable-httpsフラグが必要
  • spring-cloud-function-adapter-aws
  • spring-cloud-starter-function-webflux
    • HTTPSで利用するには-enable-httpsフラグが必要

また、以下についてもサポートされているようです。

動作確認

今回は Spring Native リポジトリのsamplesの中からwebflux-nettyを利用して動かしてみます。

とはいってもREADME.mdに記載されている通り、Docker Daemonを立ち上げて コマンドを打つだけ。

$ mvn spring-boot:build-image

親のpom.xmlにbuildimageの設定がされているため、以前みたようにPaketo BuildpackをベースにしたDocker Imageが作成されています。

$ docker-compose up

0.036秒で起動。やはり早い。早いは正義。アプリケーションもきちんと動いていそうです。

まとめ

ということでSpring Native Beta版の簡単な紹介をしてみました。まだBeta版でありすぐプロダクションで使えるような状態ではないかもしれないですが、これからの流れとしてきっとNative Imageは主流になっていくと思うので(というかなってほしい)、積極的に使っていき発展を見守りたいですね。