Upgrading from Spring Boot 3.0
Apache HttpClient 4 의 종속성 관리
- Spring Framework 6 에서 HttpClient 4(RestTemplate)에 대한 지원이 중단 되고, HttpClient 5로 대체되었다
- 따라서 SpringBoot 3.0 에서 HttpClient 4와 5에 대한 의존성 관리를 포함하도록 한다
- HttpClient 4를 여전히 사용 가능하지만, RestTemplate을 사용하면서 만나는 에러 상황들을 트래킹하기 어려울 수 있다
- 정리하자면, SpringBoot 3.1에선 HttpClient 4와 5를 모두 지원하지만 HttpClient 5를 사용하는 것을 권장한다
Servlet 및 Filter 등록
ServletRegistrationBean,FilterRegistrationBeanBean 등록에 실패할 경우 warning 이 아닌IllegalStateException을 발생시킨다setIgnoreRegistrationFailure(true)옵션으로 기존과 같은 동작을 수행할 수 있다
Git Commit ID Maven Plugin Version Property
io.github.git-commit-id:git-commit-id-maven-plugin의 버전을 재정의하는 데 사용되는 프로퍼티가 artifact 이름과 일치하도록 변경되었다- 해당 사항을 적용하려면
pom.xml에서git-commit-id-plugin.version속성을git-commit-id-maven-plugin.version으로 바꾸어야 한다
Spring Kafka Retry Topic Auto-configuration
- Auto-Configured 된 retryable topic 설정(
spring.kafka.retry.topic.enabled: true)을 사용하는 경우,maxDelay를 사용하여 back off 하면maxDelay수준의 모든 retry가 동일 topic으로 전송 된다 - 이전에는
maxDelay를 초과하더라도, retry 시 마다 별도의 topic이 사용 되었다
Testcontainers 의 종속성 관리
- SpringBoot의 종속성이 이제 TestContainers를 포함한다
- SpringBoot에서 관리하는 Testcontainers의 버전은
testcontainers.version로 재정의가 가능하다
Hibernate 6.2
- SpringBoot 3.1의 Hibernate 버전이 Hibernate 6.2로 업그레이드 된다
Jackson 2.15
- SpringBoot 3.1의 Jackson 버전이 Jackson 2.15로 업그레이드 된다
Mokito 5
- Springboot 3.1의 Mockito 버전이 Mockito 5로 업그레이드 된다
Health Group Membership 유효성 검증
- staratup 시에 구성 된 Health Group의 유효성을 검사 한다
- 존재하지 않는 health indicator가 포함되거나 제외 된 경우 startup에 실패한다
management.endpoint.health.validate-group-membership속성으로 해당 기능을 disabled 할 수 있다
New and Noteworthy
Service Connections
- 새로운 서비스 connection 개념이 도입 되었으며 이는
ConnectionDetailsBean으로 표현 된다 ConnectionDetailsBean은 서비스 제거에 대한 연결을 설정하는 데 필요한 세부 정보를 제공하며, SpringBoot는 auto-configured 된ConnectionDetailsBean을 사용한다ConnectionDetailsBean을 사용할 수 있는 경우, 이는 connection 관련 구성 속성들보다 우선순위가 높다- connection 자체와 관련이 없는 구성 프로퍼티는 계속 사용 된다
- 위와 같은 low-level 기능은
ConnectionDetailsBean을 정의하여 사용하는 다른 higher-level 기능을 위한 building block으로 사용 된다
Testcontainers
- 개발 시점에 Testcontainer를 사용하여 외부 서비스를 관리할 수 있는 기능을 지원한다
- 개발 시점에 Testcontainer를 사용하는 데, Maven goal (
spring-boot:test-run) 와 Gradle task (bootTestRun) 를 사용할 수 있다 - Testcontainer의 컨테이너 인스턴스를 static field로 선언하는 클래스는
@ImportTestcontainers어노테이션으로 import 할 수 있다 - Testcontainer 수명 주기 관리가 개선되어 컨테이너가 먼저 초기화되고 마지막으로 파기 되도록 개선 되었다
- 재사용 가능한 컨테이너에 대한 지원이 개선 되었다
- 컨테이너
@Bean메서드에서 프로퍼티를 제공하려면,DynamicPropertyRegistry를 주입할 수 있다 - 프로퍼티 based Testcontainer 사용 시,
@DynamicPropertySource어노테이션을 주로 사용 했었는데, 이는@ServiceConnection어노테이션으로 간단히 표현이 가능해졌다
Docker Compose
- 신규 모듈인
spring-boot-docker-compose는 Docker Compose와의 통합을 제공한다 - Application이 시작 되면, Docker Compose integration이 현재 작업 디렉터리에서 설정 파일을 찾는다
- 지원되는 file 타입
compose.yamlcompose.ymldocker-compose.yamldocker-compose.yml- 비표준 파일을 사용하려면
spring.docker.compose.file속성을 정의하여 사용해야 한다
- 기본적으로 설정 파일에 선언 된 서비스는
docker compose up을 사용하여 시작 된다 - 설정 파일에 선언 된 서비스 중지 시,
docker compose down을 사용하여 서비스가 종료 된다 - Docer Compose의 라이프사이클 관리를 제공하는 프로퍼티는 다음과 같다
spring.docker.compose.lifecycle-managementspring.docker.compose.startup.commandspring.docker.compose.shutdown.command
SSL 설정
- Java KeyStores 와 PEM-encoded 인증서와 같은 SSL 신뢰 자료를 프로퍼티로 구성이 가능하다
- Embedded web server, data services, RestTemplate, WebClient와 같은 다양한 유형의 connection에 일관된 방식으로 적용이 가능하다
Auto-configuration for Spring Authorization Server
- 새로운
spring-boot-starter-oauth2-authorization-server스타터 를 지원한다
Docker Image Building
- Maven goal(
spring-boot:build-image) 와 Gradle task(bootBuildImage) 에서createdDate를 설정할 수 있다.- 이는 특정한 시간으로 설정할 수 있고,
now에 해당하는 시간으로도 설정이 가능하다
- 이는 특정한 시간으로 설정할 수 있고,
- Maven goal(
spring-boot:build-image) 와 Gradle task(bootBuildImage) 에서applicationDirectory옵션을 사용할 수 있다- 이는 buildpack이 사용한 application 컨텐츠를 업로드 할 builder image의 위치를 설정하는데 사용 된다
Spring for GraphQL
- GraphQL 컨트롤러에
@GraphQlExceptionHandler을 정의하거나,@ControllerAdvice를 사용하는 것을 지원한다 GraphQlSource의 구성을 통해QueryDslDataFetcher,QueryByExampleDataFetcher와 같은DataFetcher구현에 대해@ControllerAdvice예외 처리를 자동으로 지원한다- Spring Data가 classpath에 있는 경우, paging 처리와 sorting을 자동으로 제공한다
GraphQlSource는ConnectionTypeDefinitionConfigurer로 자동 설정 된다- “Connection” 으로 끝나는 field를 찾아
Connection Type을 생성하고, 필요한 type 정의가 없는 경우 이를 추가한다
- “Connection” 으로 끝나는 field를 찾아
Support for Exporting Traces Using OTLP
io.opentelemetry:opentelemetry-exporter-otlp가 classpath에 있으면,OtlpHttpSpanExporter가 자동 설정 된다—management.otlp.tracing.*프로퍼티로 exporter에 대한 커스터마이징이 가능하다
Wavefront Span Tag Customization
management.wavefront.trace-derived-custom-tag-keys프로퍼티로 RED 메트릭에 대한 Span Tag를 커스터마이징 할 수 있다
Different log levels for file and console
Logbakc혹은Log4j2를 사용한다면, console log와 file log의 Log level을 다르게 설정할 수 있다logging.threshold.consolelogging.threshold.file
Maximum HTTP Response Header Size
Tomcat이나Jetty를 사용한다면, HTTP Response Header의 최대 값을 제한할 수 있다 (기본 제한 값 : 8kb)- Tomcat :
server.tomcat.max-http-response-header-size프로퍼티 사용 - Jetty :
server.jetty.max-http-response-header-size프로퍼티 사용
- Tomcat :
ActiveMQ Support
- SpringBoot 3.0 에서 제거 되었던 ActiveMQ Client에 대한 자동 구성이 다시 추가 되었다
- Embedded ActiveMQ broker에 대한 지원은 ActiveMQ의 broker가 아직 JMS 3.0을 지원하지 않기 때문에 복원 되지 않았다
Dependency Upgrades
- Spring Authorization Server 1.1.0
- Spring Batch 5.0.2
- Spring Data 2023.0.0
- Spring Framework 6.0.9
- Spring GraphQL 1.2.0
- Spring HATEOAS 2.1.0
- Spring Integration 6.1.0
- Spring Kafka 3.0.7
- Spring LDAP 3.1.0
- Spring Security 6.1.0
- Spring Session 3.1.0
- Spring Web Services 4.0.4
- Couchbase Java Client 3.4.6
- Elasticsearch Client 8.7
- Hibernate 6.2
- GraphQL Java 20.1
- Jackson 2.15.0
- Kafka 3.4.0
- Kotlin 1.8.21
- Liquibase 4.20
- Micrometer 1.11.0
- Micrometer Tracing 1.1.1
- Mockito 5.3
- Native Build Tools 0.9.22
- Neo4j Java Driver 5.8.0
- OpenTelemetry 1.24.0
- Rabbit AMQP Client 5.17.0
- Reactor BOM 2022.0.7
- Testcontainers 1.18
- Undertow 2.3.6.Final
그 외 잡다한 사항들
- Spring Kafka의
ContainerCustomizerBean이KafkaListenerContainerFactory에 대한 자동 구성을 지원한다 - OLTP registry에서 sending headers를 지원하기 위해
management.otlp.metrics.export.headers프로퍼티가 추가되었다 - AOT 처리에서
JoranConfiguratorsBean을 사용할 수 있다 spring.kafka.admin프로퍼티에 신규 프로퍼티가 추가 되었다close-timeoutoperation-timeoutauto-startupauto-create
- 자동 구성 된
ConcurrentKafkaListenerContainerFactory에BatchInterceptorBean이 적용 된다 - recognized 된
CloudPlaform값에 Nomad가 추가 되었다 spring.jmx에registration-policy프로퍼티를 명시할 수 있다SanitizableData를 위해withSanitizedValue유틸리티 메서드가 추가 되었다RabbitTemplateCustomizer가 추가 되었다- 이는 자동 구성 된
RabbitTemplate타입을 커스터마이징 할 수 있다
- 이는 자동 구성 된
- CNB Platform API 0.11 을 지원한다
spring-boot-starter-parent는maven.compiler.release에서 구성 된 Java 버전으로 설정한다Dspring-boot.build-info.skip세팅을 통해build-info를 건너뛸 수 있다- Micrometer의
OtlpMeterRegistry에 대한 Aggregation temporality 설정 지원 Log4j2andLogback에 대한 추가 색상 지원- R2DBC MySQL driver (
io.asyncer:r2dbc-mysql) 에 대한 종속성 관리 지원 - R2DBC MariaDB driver (
org.mariadb:r2dbc-mariadb) 에 대한 종속성 관리 지원 OpenTelemetry를 사용할 때, 자동 구성 된SdkTracerProvider를 생성하는 데 사용 되는SdkTracerProviderBuilder가 정의 된SdkTracerProviderBuilderCustomizerBean에 의해 커스터마이즈 될 수 있다MockServerRestTemplateCustomizer가setBufferContent메서드를 통해 content buffering활성화를 지원한다BatchConversionServiceCustomizerBean을 정의하여Spring Batch에서 사용 되는 conversion service(변환 서비스)를 커스터마이징 할 수 있다- JWK Set URI를 위한 JTWW decoder를 생성하는 builder를
JwkSetUriReactiveJwtDecoderBuilderCustomizer,JwkSetUriJwtDecoderBuilderCustomizerBean을 통해 커스터마이징 할 수 있다 io.r2dbc:r2dbc-mssql에 대한 종속성이 복원되었다- Logback의 루트 로그 레벨이
INFO로 default 설정 가능하다 - 기본적으로, Docker Compose는
down보다stop을 사용하여 정지한다
Deprecations in Spring Boot 3.1.0
spring.kafka.streams.cache-max-size-buffering가spring.kafka.streams.state-store-cache-max-size로 대체 된다MongoPropertiesClientSettingsBuilderCustomizer가StandardMongoClientSettingsBuilderCustomizer로 대체 된다org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter가org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper로 대체 된다org.springframework.boot.web.server.SslStoreProvider가 SSL bundle로 대체 된다
반응형
'개발 > SpringBoot' 카테고리의 다른 글
| Spring Boot 2.4 -> 2.5 변경 사항 (0) | 2023.06.12 |
|---|---|
| Spring Boot 2.3 -> 2.4 변경 사항 (0) | 2023.06.08 |
| Spring Boot Release Notes 정리 시작 (0) | 2023.06.05 |
| [SpringBoot/Gradle] ClassNotFound Exception (Feat. implementation & api) (0) | 2022.08.07 |
| Consider defining a bean of type 'Class' in your configuration. 에러 해결 [Spring Boot] (4) | 2022.03.24 |
댓글