8
Help us understand the problem. What are the problem?

posted at

updated at

SpringBoot 2.5 to 2.6 メモ

概要

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

過去の記事はこちら

Minimum Requirements Changes

変更なしとのこと。

Circular References Prohibited by Default

Bean間の循環参照がデフォルトで禁止となったようです。
循環参照があると起動がBeanCurrentlyInCreationExceptionで失敗するとのこと。

基本的には循環参照は解消してあげたほうがいいと思いますが、
以下のようにpropertyで許容することができるようです。

application.properties
spring.main.allow-circular-references = true
application.yaml
spring:
  main:
    allow-circular-references: true

PathPattern Based Path Matching Strategy for Spring MVC

デフォルトのパスの判定クラスが、AntPathMatcherからPathPatternParserに変わります。
基本的には互換性があるのですが、以下2つが差分とのこと。

  1. {*spring}という構文が追加され、0個以上のパスセグメントを@PathVariableで取得できる
  2. **を用いたマッチングがパターンの最後でのみ許容される(/**/hogeとかがNG)

参考

それぞれもう少し深掘りしてみます

1. {*spring}

以下のようなControllerを定義し、アプリケーションを起動します。

@RestController
public class SampleController {
    @GetMapping("/{*path}")
    public String message(@PathVariable String path) {
        return path;
    }
}

curlで叩いてみると確かに複数パスが取得できています。

$ curl http://localhost:8080/hoge
/hoge

$ curl http://localhost:8080/hoge/fuga
/hoge/fuga

2. **

以下のようなControllerを定義し、アプリケーションを起動します。

@RestController
public class SampleController {
    @GetMapping("/**/hello")
    public String hello() {
        return "hello";
    }
}

起動に失敗しました。。。
(使えなくなった構文を使っているので当然ですね)

ログ
***************************
APPLICATION FAILED TO START
***************************

Description:

Invalid mapping pattern detected: /**/hello
^
No more pattern data allowed after {*...} or ** pattern element

Action:

Fix this pattern in your application or switch to the legacy parser implementation with 'spring.mvc.pathmatch.matching-strategy=ant_path_matcher'.

AntPathMatcherを使いたい場合は?

起動失敗時のログにも出ていますが、以下のpropertyを設定すればOK

application.properties
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
application.yaml
spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

Actuator Env InfoContributor Disabled by Default

Actuatorのinfoエンドポイントがデフォルトで無効になるとのこと

infoを使っている場合はpropertyで有効にしてあげる必要があります

application.properties
management.info.env.enabled=true
application.yaml
management:
  info:
    env:
      enabled: true

Oracle Database Driver Dependency Management

Oracleデータベースのドライバの依存関係が整理されています。

com.oracle.ojdbcグループのドライバを使用している場合はcom.oracle.database.jdbcグループを使用するよう変更する必要あり!

依存関係の整理のみのため、明示的にversionを指定してあげればcom.oracle.ojdbcを使っていてもOK!

Redis Connection Pooling

commons-pool2がクラスパスに存在する場合、デフォルトでプーリングが有効になるとのこと。

じゃあ、例えばspring-boot-starter-data-redis:2.6.0を利用した時にcommons-pool2も依存に含まれるかと言うとNoだったので、明示的に依存に追加していない限りはプーリングの影響はなさそう

無効にする場合はjedisなのかlettuceなのかに応じて以下のpropertyを設定すればOK

application.properties
spring.redis.jedis.pool.enabled=false
spring.redis.lettuce.pool.enabled=false
application.yaml
spring:
  redis:
    jedis:
      pool:
        enabled: false
    lettuce:
      pool:
        enabled: false

Using WebTestClient for Testing Spring MVC

Spring MVCのテストをWebTestClientを使って記述できるようになりました!

WebTestClientの方が検証の実装が書きやすい印象なので個人的には嬉しい。

利用にはWebClientが存在する必要があるので、webのみの利用であればテストの依存でwebfluxを追加してあげる

build.gradle
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework:spring-webflux:5.3.4'
    testImplementation 'io.projectreactor.netty:reactor-netty:1.0.4'
}

テストの実装コードはこちら

@AutoConfigureMockMvc
@SpringBootTest
class SpringWebControllerTest {
    @Autowired
    WebTestClient webTestClient;

    @Test
    void test() {
        webTestClient.get()
                .uri("/hello")
                .exchange()
                .expectStatus().isOk();
    }
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
8
Help us understand the problem. What are the problem?