🌊
SpringBoot2.6でのConfigurationPropertiesのRecords対応
SpringBoot2.6から(執筆時点 v2.6.0-M2)、RecordsでConfigurationPropertiesを利用する場合の機能追加がありましたので備忘録的に記載しておきます。
何が変わったか
@ConfigurationProperties
でクラスのフィールドにプロパティの値をセットする場合、以下のように@ConstructorBinding
を指定する必要がありました。
@ConfigurationProperties("my.service")
@ConstructorBinding
public record MyProperties(boolean enabled, InetAddress remoteAddress) {
}
Recordsにはセッターは定義できないことから必ず@ConstructorBinding
を指定する必要がありましたが、SpringBoot2.6からこれが不要となりました。
サンプル
というわけでサンプルコードを記載しておきます。
MyProperties.java
@ConfigurationProperties("my.service")
public record MyProperties(boolean enabled, InetAddress remoteAddress) {
}
MyController.java
@RestController
@RequestMapping("/")
public class MyController {
private MyProperties myProperties;
public MyController(MyProperties myProperties) {
this.myProperties = myProperties;
}
@GetMapping
public MyProperties index() {
return myProperties;
}
}
application.yml
my:
service:
enabled: true
remote-address: 192.168.1.1
$ curl localhost:8080/
{"enabled":true,"remoteAddress":"192.168.1.1"}
参考
spring-boot issue
27216 @ConstructorBinding behavior by default for @ConfigurationProperties annotated records
Discussion