4
2

More than 1 year has passed since last update.

SpringBoot 2.4 to 2.5 メモ

Last updated at Posted at 2021-05-24

概要

springboot 2.5がGAとなりました
Release Noteを参考に2.4系から2.5系への移行方法をまとめてみます
自分が移行するときに関係のあるものや興味があるものが中心となりますがご容赦ください🙇‍♂️

過去の記事はこちら

Minimum Requirements Changes

対応するGradleのバージョンが6.8以降となりました。
投稿時点の最新バージョン7.0.2へのアップデートコマンドは以下のようになります。

./gradlew wrapper --gradle-version 7.0.2

Gradle Default jar and war Tasks

jar, warタスクがデフォルトで有効になります。

そして、bootJarの生成したjarファイルと衝突しないようjar, warタスクで生成されるファイルに「-plain」が付与されます。

以下Tipsです

-plainを取り除く

archiveClassifierで空文字を指定してあげればOK

※Release noteではclassifierが紹介されていますが、非推奨となっていました…

build.gradle
archivesBaseName = 'sample'

bootJar {
    archiveClassifier = 'boot'
}

jar {
    archiveClassifier = ''
}

このような設定だと、以下のように2つのjarファイルが生成されます。

build
...
├── libs
│   ├── sample-boot.jar
│   └── sample.jar
...

enabledで無効化する

enabled = falseを設定するとjarの生成を無効化することができます

build.gradle
jar {
    enabled = false
}

Environment Variable Prefixes

環境変数にprefixを付与することができるようになるようです。

prefixを付与するにはmainクラスを以下のように記述します。

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.setEnvironmentPrefix("prefix");
        application.run(args);
    }
}

この状態で、以下のようにするとserver.portを変更してアプリケーションを起動できます

PREFIX_SERVER_PORT=8081 ./gradlew bootRun

当然SERVER_PORTでは変更ができなくなるので、既存システムにこの変更を入れるメリットはないかなぁ

OpenMetrics for Prometheus

/actuator/prometheusを叩くときにHeaderを設定することでOpenMetrics形式のレスポンスが返るようになりました。

デフォルトはprometheus形式で、Acceptヘッダーにapplication/openmetrics-textを載せるとOpenMetrics形式になります。

curl http://localhost:8080/actuator/prometheus -H 'Accept: application/openmetrics-text'

Metrics for Spring Data Repositories

Spring Data repositoriesのメトリクスがデフォルトで収集されるようになります!✨

以下のJPAだと

public interface UserRepository extends CrudRepository<User, String> {
    Optional<User> findById(String id);
}

こんなメトリクスが取得できます。

# HELP spring_data_repository_invocations_seconds_max
# TYPE spring_data_repository_invocations_seconds_max gauge
spring_data_repository_invocations_seconds_max{exception="None",method="findById",repository="UserRepository",state="SUCCESS",} 0.03175074
# HELP spring_data_repository_invocations_seconds
# TYPE spring_data_repository_invocations_seconds summary
spring_data_repository_invocations_seconds_count{exception="None",method="findById",repository="UserRepository",state="SUCCESS",} 1.0
spring_data_repository_invocations_seconds_sum{exception="None",method="findById",repository="UserRepository",state="SUCCESS",} 0.03175074

application.ymlで以下の設定が可能。

application.yml
management:
  endpoints:
    web:
      exposure:
        include: "prometheus"
  metrics:
    data:
      repository:
        autotime:
          # 自動でメトリクスを収集するかどうか?
          # falseを指定すると個別に「@Timed」アノテーションの付与が必要
          enabled: true
          # パーセンタイルも取得する
          percentiles: 0.5,0.99
        # メトリクス名を指定する
        metric-name: "spring.data.repository.invocations"

補足: @Timedアノテーション

@Timedアノテーションを使用すると、任意のメソッドでメトリクス計測ができる…!

使い方は

  1. spring-boot-starter-aopを依存に加えて
  2. TimedAspectをBean登録し
  3. メトリクスを取りたいメソッドに@Timedを付与する

だけ!便利すぎ!

build.gradle
dependencies {
    ...
    implementation 'org.springframework.boot:spring-boot-starter-aop'
    ...
}
import io.micrometer.core.aop.TimedAspect;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApplicationConfiguration {
    @Bean
    public TimedAspect timedAspect(MeterRegistry registry) {
        return new TimedAspect(registry);
    }
}
MybatisのMapperメソッド
import io.micrometer.core.annotation.Timed;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.Optional;

@Mapper
public interface UserRepository {
    @Timed(value = "sql.time")
    @Select("SELECT * FROM USER WHERE id = #{id}")
    Optional<User> findById(String id);
}

こんな感じでJPAを使用していなくても、例えばMybatisのMapperの実行時間をメトリクスに落とすことができます

参考:

Java 16 / Gradle 7 Support

Java 16とGradle 7がそれぞれサポートされています。

その他参考リンク

▼Spring Boot 2.5 Configuration Changelog

▼非推奨なpropertyを使用していたらビルドを失敗させる

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2