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
,FilterRegistrationBean
Bean 등록에 실패할 경우 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 개념이 도입 되었으며 이는
ConnectionDetails
Bean으로 표현 된다 ConnectionDetails
Bean은 서비스 제거에 대한 연결을 설정하는 데 필요한 세부 정보를 제공하며, SpringBoot는 auto-configured 된ConnectionDetails
Bean을 사용한다ConnectionDetails
Bean을 사용할 수 있는 경우, 이는 connection 관련 구성 속성들보다 우선순위가 높다- connection 자체와 관련이 없는 구성 프로퍼티는 계속 사용 된다
- 위와 같은 low-level 기능은
ConnectionDetails
Bean을 정의하여 사용하는 다른 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.yaml
compose.yml
docker-compose.yaml
docker-compose.yml
- 비표준 파일을 사용하려면
spring.docker.compose.file
속성을 정의하여 사용해야 한다
- 기본적으로 설정 파일에 선언 된 서비스는
docker compose up
을 사용하여 시작 된다 - 설정 파일에 선언 된 서비스 중지 시,
docker compose down
을 사용하여 서비스가 종료 된다 - Docer Compose의 라이프사이클 관리를 제공하는 프로퍼티는 다음과 같다
spring.docker.compose.lifecycle-management
spring.docker.compose.startup.command
spring.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.console
logging.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의
ContainerCustomizer
Bean이KafkaListenerContainerFactory
에 대한 자동 구성을 지원한다 - OLTP registry에서 sending headers를 지원하기 위해
management.otlp.metrics.export.headers
프로퍼티가 추가되었다 - AOT 처리에서
JoranConfigurators
Bean을 사용할 수 있다 spring.kafka.admin
프로퍼티에 신규 프로퍼티가 추가 되었다close-timeout
operation-timeout
auto-startup
auto-create
- 자동 구성 된
ConcurrentKafkaListenerContainerFactory
에BatchInterceptor
Bean이 적용 된다 - 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 설정 지원 Log4j2
andLogback
에 대한 추가 색상 지원- R2DBC MySQL driver (
io.asyncer:r2dbc-mysql
) 에 대한 종속성 관리 지원 - R2DBC MariaDB driver (
org.mariadb:r2dbc-mariadb
) 에 대한 종속성 관리 지원 OpenTelemetry
를 사용할 때, 자동 구성 된SdkTracerProvider
를 생성하는 데 사용 되는SdkTracerProviderBuilder
가 정의 된SdkTracerProviderBuilderCustomizer
Bean에 의해 커스터마이즈 될 수 있다MockServerRestTemplateCustomizer
가setBufferContent
메서드를 통해 content buffering활성화를 지원한다BatchConversionServiceCustomizer
Bean을 정의하여Spring Batch
에서 사용 되는 conversion service(변환 서비스)를 커스터마이징 할 수 있다- JWK Set URI를 위한 JTWW decoder를 생성하는 builder를
JwkSetUriReactiveJwtDecoderBuilderCustomizer
,JwkSetUriJwtDecoderBuilderCustomizer
Bean을 통해 커스터마이징 할 수 있다 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 |
댓글