springboot 2.6がGAとなりました
Release Noteを参考に2.5系からの変更点をまとめます
自分が移行するときに関係のあるものや興味があるものが中心となりますがご容赦ください🙇♂️
関連記事はこちら
SpringBoot UpdateまとめMinimum Requirements Changes
変更なしとのことなので、
既存プロジェクトのGradleやJavaのバージョンでそのままバージョンアップ可能。
Circular References Prohibited by Default
Bean間の循環参照がデフォルトで禁止となったようです。
循環参照があると起動がBeanCurrentlyInCreationException
で失敗するとのこと。
基本的には循環参照は解消してあげたほうがいいと思いますが、
以下のようにpropertyで許容することができるようです。
spring.main.allow-circular-references = true
spring:
main:
allow-circular-references: true
PathPattern Based Path Matching Strategy for Spring MVC
デフォルトのパスの判定クラスが、AntPathMatcher
からPathPatternParser
に変わります。
基本的には互換性があるのですが、以下2つが差分とのこと。
{*string}
という構文が追加され、0個以上のパスセグメントを@PathVariable
で取得できる**
を用いたマッチングがパターンの最後でのみ許容される(/**/hoge
とかがNG)
参考:
それぞれもう少し深掘りしてみます
1. {*string}
以下のような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です。
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
Actuator Env InfoContributor Disabled by Default
Actuatorのinfo
エンドポイントがデフォルトで無効になるとのこと
info
を使っている場合はpropertyで有効にしてあげる必要があります
management.info.env.enabled=true
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
spring.redis.jedis.pool.enabled=false
spring.redis.lettuce.pool.enabled=false
spring:
redis:
jedis:
pool:
enabled: false
lettuce:
pool:
enabled: false
Using WebTestClient for Testing Spring MVC
Spring MVCのテストをWebTestClient
を使って記述できるようになりました!
WebTestClient
の方が検証の実装が書きやすい印象なので個人的には嬉しい。
利用にはWebClient
が存在する必要があるので、webのみの利用であればテストの依存でwebfluxを追加してあげる
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();
}
}