전체 Release Notes 목록은 이곳에서 확인할 수 있습니다.
https://luvstudy.tistory.com/tag/Release%20Notes
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.4-Release-Notes
17 revision 기준으로 작성됨
Spring Boot 3.4 Release Notes
Upgrading from Spring Boot 3.3
RestClient and RestTemplate
Reactor Netty의 HttpClient
또는 JDK의 HttpClient
를 사용하도록 RestClient
및 RestTemplate
을 auto-configure 하는 지원이 추가되었습니다.
우선순위에 따라 지원되는 client는 다음과 같습니다:
- Apache HTTP Components (
HttpComponentsClientHttpRequestFactory
) - Jetty Client (
JettyClientHttpRequestFactory
) - Reactor Netty
HttpClient
(ReactorClientHttpRequestFactory
) - JDK
HttpClient
(JdkClientHttpRequestFactory
) - Simple JDK
HttpURLConnection
(SimpleClientHttpRequestFactory
)
특히 classpath에 HTTP client library가 없으면 이전에 SimpleClientHttpRequestFactory
가 사용되었을 곳에 JdkClientHttpRequestFactory
가 사용될 가능성이 높습니다.
특정 client는 spring.http.client.factory
를 설정하여 선택할 수 있습니다.
지원되는 값은 http-components
, jetty
, reactor
, jdk
및 simple
입니다.
다섯 client 모두 기본적으로 redirect를 따릅니다.
이 동작을 비활성화하려면 spring.http.client.redirects
를 dont-follow
로 설정합니다.
Apache HTTP Components and Envoy
Apache HTTP Component는 HTTP/1.1 TLS 업그레이드와 관련하여 HttpClient
의 기본 값을 변경했습니다.
대부분의 proxy server는 문제없이 업그레이드를 처리하지만 Envoy나 Istio에서 문제가 발생할 수 있습니다.
이전 동작을 복원해야 하는 경우 새로운 ClientHttpRequestFactoryBuilder
를 사용할 수 있습니다.HttpComponentsClientHttpRequestFactoryBuilder
를 정의하고 다음 custom을 적용합니다.
@Bean
public HttpComponentsClientHttpRequestFactoryBuilder httpComponentsClientHttpRequestFactoryBuilder() {
return ClientHttpRequestFactoryBuilder.httpComponents()
.withDefaultRequestConfigCustomizer((builder) -> builder.setProtocolUpgradeEnabled(false));
Bean Validation of Configuration Properties
이전에는 @Validated
로 annotation을 사용한 @ConfigurationProperties
class가 Hibernate Validator와 같은 Bean Validation 구현을 사용하여 검증될 때 @Valid
사용 여부와 관계없이 binding 된 대로 중첩된 속성의 검증이 수행되었습니다.
Spring Boot 3.4에서는 이제 validation이 Bean Validation 사양의 동작을 따릅니다.
validation은 @ConfigurationProperties
annotation이 달린 class에서 수행되며 해당 field가 @Valid
로 annotation이 달린 중첩된 속성까지만 적용됩니다.
업그레이드하는 경우 Bean Validation 제약 조건으로 @ConfigurationProperties
class를 검사하면 됩니다.
중첩된 속성까지 validation을 적용하려면 필요에 따라 @Valid
를 추가합니다.
Bean-based Conditions
@ConditionalOnBean
및 @ConditionalOnMissingBean
의 동작은 @Bean
method에서 사용되고 annotation
attribute가 설정된 경우 변경되었습니다.
이전과 마찬가지로 두 조건 모두 일치할 type에 대한 기본 값으로 @Bean
method의 return type을 사용합니다.
이전에는 name
, type
또는 value
가 설정된 경우 이 기본 값이 사용되지 않았습니다.
Spring Boot 3.4부터는 annotation
이 설정된 경우 이 기본 값은 사용되지 않습니다.
이전 동작을 복원하려면 @Bean
method의 return type인 value
와 annotation
을 모두 지정합니다.
Graceful Shutdown
embedded web server(Jetty, Rector Netty, Tomcat, 또는 Undertow)의 Graceful shutdown이 이제 기본적으로 활성화되었습니다.
이전 동작을 복원해야 하는 경우 server.shutdown
을 immediate
로 설정합니다.
Paketo tiny Builder for Building OCI Images
Maven spring-boot:build-image
goal 또는 Gradle bootBuildImage
task를 사용하여 JVM application에 대한 OCI image를 build 할 때 사용되는 default Cloud Native Buildpacks builder가 paketobuildpacks/builder-jammy-base
에서 paketobuildpacks/builder-jammy-java-tiny
로 변경되었습니다.
이렇게 하면 이미지가 더 작아집니다.tiny
builder에는 shell이 포함되어 있지 않으므로 application을 실행하기 위해 start script가 필요한 application에는 동작하지 않을 수 있습니다.
builder를 customize 하는 방법에 대한 정보는 Maven 또는 Gradle documentation을 참조하세요.
Dynamic Properties with Testcontainers
@Bean
method에 DynamicPropertyRegistry
를 주입(inject)하여 dynamic properties를 정의하는 기능은 더 이상 지원되지 않으며, 이를 시도하면 기본적으로 실패합니다.@Bean
method에 DynamicPropertyRegistry
를 주입하는 대신 DynamicPropertyRegistrar
를 반환하는 별도의 @Bean
method를 구현합니다.
이 별도의 bean method는 properties 값이 제공될 container를 주입해야 합니다.
이를 통해 일부 container lifecycle 문제가 해결되고 property 값을 제공한 container가 property가 사용되기 전에 시작되도록 할 수 있습니다.
위에서 설명한 lifecycle 문제가 발생할 위험을 무릅쓰고 DynamicPropertyRegistry
를 계속 주입하려는 경우 spring.testcontainers.dynamic-property-registry-injection
을 warn
또는 allow
로 설정합니다.
전자는 주입된 DynamicPropertyRegistry
의 사용을 허용하는 동안 warning log를 출력합니다.
후자는 주입된DynamicPropertyRegistry
의 사용을 자동으로 허용하여 Spring Boot 3.3의 동작을 완전히 복원합니다.
@AutoConfigureTestDatabase with Containers
@AutoConfigureTestDatabase
annotation은 이제 database가 container에서 제공되었는지 감지하려고 시도합니다.
container database에서 annotation을 사용하려는 경우 replace=Replace.NONE
을 추가할 필요가 없습니다.
이전 동작을 되돌려야 하는 경우 annotation에 replace=Replace.AUTO_CONFIGURED
을 설정합니다.
Controlling Access to Actuator Endpoints
endpoint 활성화 및 비활성화에 대한 지원이 재 작업 되어 기존에 제공되던 on/off 지원이 보다 세분화된 access model로 대체되었습니다.
새로운 model은 endpoint를 비활성화(none
access)하고 완전히 활성화(unrestricted
access)하는 것 외에도 endpoint operation에 대한 read-only
access만 허용하는 것을 지원합니다.
다음 속성은 더 이상 사용되지 않습니다:
management.endpoints.enabled-by-default
management.endpoint.<id>.enabled
대체는 다음과 같습니다:
management.endpoints.access.default
management.endpoint.<id>.access
마찬가지로, @Endpoint
의 enableByDefault
attribute는 더 이상 사용되지 않으며 새로운 defaultAccess
attribute로 대체되었습니다.
이러한 변경 사항의 일부로 enabled-by-default
는 이제 @ConditionalOnEnabledEndpoint
사용 여부와 관계없이 일관되게 적용됩니다.
업그레이드하는 동안 endpoint에 대한 access 권한을 잃은 경우 management.endpoint.<id>.access
를 read-only
또는 unrestricted
로 설정하거나 management.endpoint.<id>.enabled
를 true
로 설정하여 endpoint에 다시 access 할 수 있도록 합니다.
또한, 운영자가 Actuator endpoint에 허용되는 access 수준을 제어할 수 있도록 하는 새로운 property가 도입되었습니다.
management.endpoints.access.max-permitted
이 property는 endpoint에 대해 구성된 모든 access를 제한합니다.
예를 들어, management.endpoints.access.max-permitted
가 read-only
로 설정되고 management.endpoint.loggers.access
가 unrestricted
로 설정된 경우 loggers endpoint에 대한 read-only access만 허용됩니다.
Cloud Foundry ConditionalOnAvailableEndpoint Exposure
@ConditionalOnAvailableEndpoint
과 함께 사용되는 EndpointExposure.CLOUD_FOUNDRY
enum value는 EndpointExposure.WEB
을 선호하여 더 이상 사용되지 않습니다.
일반적인 Spring Boot application은 이 변경 사항의 영향을 받지 않을 가능성이 크지만, custom Cloud Foundry 특정 actuator endpoint bean이 있는 경우 EndpointExposure.WEB
을 사용하도록 조건을 업데이트해야 합니다.
HtmlUnit 4.3
HtmlUnit이 4.3으로 업그레이드되었습니다.
이 업그레이드에는 dependency가 net.sourceforge.htmlunit:htmlunit
에서 org.htmlunit:htmlunit
로 변경되고 package name이 com.gargoylesoftware.htmlunit.*
에서 org.htmlunit.*
로 변경됩니다.
업그레이드하는 경우 build configuration과 import도 그에 따라 업데이트해야 합니다.
Selenium HtmlUnit 4.22
Selenium HtmlUnit이 4.22로 업데이트되었습니다.
이 업그레이드에는 dependency가 org.seleniumhq.selenium:htmlunit-driver
에서 org.seleniumhq.selenium:htmlunit3-driver
로 변경됩니다.
업그레이드하는 경우, build configuration도 그에 따라 업데이트해야 합니다.
WebJars Locator Integration
더 빠른 startup time과 효율적인 webjars 자산 확인 을 위해, pom.xml/build.gradle 을 업데이트하여 org.webjars:webjars-locator-core
대신 org.webjars:webjars-locator-lite
를 사용해야 합니다.
(두 dependency 모두 Spring Boot에서 관리).
Spring에서 org.webjars:webjars-locator-core
지원은 deprecated 되었으며 향후 버전에서 제거될 예정입니다.
이 기능에 대한 reference documentation을 참조하세요 .
OkHttp Dependency Management Removed
Spring Boot는 더 이상 OkHttp에 의존하지 않으므로 version을 관리하지 않습니다.
application에 OkHttp 종속성이 있는 경우 해당 요구 사항을 충족하는 OkHttp version을 사용하도록 build를 업데이트하세요.
Netty in Native Image
Spring Boot 3.4는 Native Build Tool에 포함된 GraalVM reachability metadata에서 아직 지원하지 않는 Netty version을 사용합니다.
Native image에서 Netty를 동작시키려면 GraalVM reachability metadata version을 수동으로 업그레이드해야 합니다.
Maven의 경우:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<metadataRepository>
<version>0.3.14</version>
</metadataRepository>
</configuration>
</plugin>
Gradle의 경우:
graalvmNative {
metadataRepository {
version = '0.3.14'
}
}
Deprecation of @MockBean and @SpyBean
Spring Framework에서 @MockBean
과 @SpyBean
은 더 이상 사용되지 않으며 @MockitoBean
과 @MockitoSpyBean
으로 대체되었습니다.
Spring Framework annotation이 제공하는 기능은 Spring Boot가 제공하는 기능과 정확히 동일하지 않습니다.
예를 들어, @MockitoBean
은 @Configuration
class에서 지원되지 않으며 대신 test class에서 field에 annotation을 달도록 migration 해야 할 수 있습니다.
Deprecations from Spring Boot 3.2
Spring Boot 3.2에서 deprecated 되어 3.4에서 제거 예정인 Classes, methods, 및 properties가 이번 release에서 제거되었습니다.
업그레이드하기 전에 더 이상 사용되지 않는 method를 호출하는지 확인하세요.
Minimum Requirements Changes
Gradle
Gradle 7.5, 8.0, 8.1, 8.2 및 8.3은 더 이상 지원되지 않습니다.
이제 Gradle 7.x (7.6.4 이상) 또는 Gradle 8.x (8.4 이상) 이 필요합니다.
New and Noteworthy
TIP: configuration의 전체적인 개요를 보려면 the configuration changelog 를 참조하세요.
Structured Logging
Elastic Common Schema (ecs
), Graylog Extended Log Format (gelf
) 및 Logstash (logstash
) 에 대한 기본 제공 지원을 통해 structured logging에 대한 지원이 도입되었습니다.
structured file logging을 활성화하려면 logging.structured.format.file
을 ecs
, gelf
또는 logstash
로 설정합니다.
마찬가지로, structured console logging을 활성화하려면 logging.structured.format.console
을 설정합니다.
custom format을 정의하는 방법을 포함하여 Spring Boot의 sturctured logging 지원에 대해 자세히 알아보려면 refrence documentation 을 참조하세요.
@Fallback
Beans
@ConditionalOnSingleCandidate
은 이제 @Fallback
bean을 지원합니다.
single primary bean이 있는 경우, primary bean이 없는 경우, single non-fallback bean이 있는 경우 조건이 일치합니다.
Defining Additional Beans
type 일치 시, bean-based condition은 이제 default 후보가 아닌 모든 bean을 무시합니다.
bean이 default 후보가 아니라고 선언하면 (@Bean(defaultCandidate=false)
사용), auto-configured type의 bean을 정의해도 동일한 type의 auto-configure bean이 back off 되지 않습니다.
예를 들어 동일한 application에서 두 개의 DataSource
bean 이나 두 개의 EntityManagerFactory
bean 을 사용하는데 필요한 configuration이 이렇게 하면 줄어듭니다.
ClientHttpRequestFactory Builders
특정 기술에 대한 ClientHttpRequestFactory
instance를 빌드할 수 있는 새로운 ClientHttpRequestFactoryBuilder
interface가 추가되었습니다.
Builder를 사용하면 기본 구성 요소를 세부적으로 custom 할 수 있을 뿐만 아니라 공통 설정을 일관된 방식으로 적용할 수 있습니다.
다음 builder는 interface의 static factory method를 사용하여 특정 library에 대해 생성할 수 있습니다:
- Apache HTTP Components (
ClientHttpRequestFactoryBuilder.httpComponents()
) - Jetty Client (
ClientHttpRequestFactoryBuilder.jetty()
) - Reactor Netty
HttpClient
(ClientHttpRequestFactoryBuilder.reactor()
) - JDK
HttpClient
(ClientHttpRequestFactoryBuilder.jdk()
) - Simple JDK
HttpURLConnection
(ClientHttpRequestFactoryBuilder.simple()
)
configuration properties를 사용하여 일반적인 설정을 적용하는 방법을 포함하여 자세한 내용은 업데이트된 문서 를 참조하세요.
Observability Improvements
Application Groups
새로운 spring.application.group
property는 application을 함께 그룹화하는 데 사용할 수 있습니다.
예를 들어, 모든 application이 특정 사업부나 하나의 더 큰 application 구성에 속해있는 경우입니다.
이 property가 설정되면 log message에도 포함됩니다.
이 동작은 logging.include-application.group
property로 제어할 수 있습니다.
또한 application group은 OpenTelemetry Resource
에 자동으로 추가됩니다.
OTLP
이제 gRPC 전송을 통해 OTLP span을 보낼 수 있습니다.
이를 위해 새 configuration property management.otlp.tracing.transport
를 grpc
로 설정합니다.
이 property는 default로 http
가 설정됩니다.
이에 대한 service connection 지원도 추가되었습니다.
management.otlp.logs
아래의 새 properties를 사용하여 OpenTelemetry의 OtlpHttpLogRecordExporter
및 SdkLoggerProvider
를 auto-configure 할 수 있습니다.
Other Observability Updates
이제 ProcessInfoContributor
는 heap 및 non-heap 사용에 대한 memory info도 보여줍니다.
새로운 management.otlp.tracing.export.enabled
, management.wavefront.tracing.export.enabled
및 management.zipkin.tracing.export.enabled
properties를 사용하여 trace exporting을 보다 세부적으로 enable 하거나 disable 할 수 있습니다.
AssertJ Support for MockMvc
AssertJ가 classpath에 있을 때 MockMvcTester
에 대한 auto-configuration이 제공됩니다.MockMvcTester
를 사용하면 fluent API를 사용하여 request와 assertion을 정의할 수 있습니다.MockMvc
가 있는 곳이라면 어디에나 inject 할 수 있습니다.
자세한 내용은 Spring Framework reference documentation의 해당 section 을 참조하세요.
Spring Pulsar
이제 default tenant와 namespace를 구성하기 위한 configuration properties가 제공됩니다.
default는 완전히 정규화되지 않은 topic URL이 있는 message를 consume 하거나 produce 할 때 적용됩니다.spring.pulsar.defaults.topic.tenant
및 spring.pulsar.defaults.topic.namespace
configuration properties를 사용하여 구성하거나 PulsarTopicBuilder
bean을 직접 정의합니다.spring.pulsar.defaults.topic.enabled=false
를 설정하여 default를 비활성화합니다.
auto-confugre 된 PulsarContainerFactory
의 사용자 정의를 지원하기 위해 새로운 PulsarContainerFactoryCustomizer
interface가 추가되었습니다.
spring.pulsar.consumer.subscription.name
configuration property는 이제 auto-configure 된 Pulsar listener container에 적용됩니다.
Pulsar client의 동시성(concurrency)을 구성하기 위한 두 가지 새로운 configuration properties가 도입되었습니다:
spring.pulsar.client.threads.io
는 broker에 대한 connection을 처리하는 데 사용되는 thread 수를 제어합니다.spring.pulsar.client.threads.listener
는 message listener에 사용되는 thread 수를 제어합니다.
마지막으로, 새로운 spring.pulsar.listener.concurrency
property를 사용하여 auto-configure 된 Pulsar message listener container의 동시성을 제어할 수 있습니다.
Couchbase Authentication
이제 client 인증서를 사용하여 basic username 및 password 인증의 대안으로 Couchbase cluster를 인증할 수 있습니다.
자세한 내용은 reference documentation 을 참조하세요.
FreeMarker
auto-configure 된 FreeMarker의 Configuration
object에서 사용하는 FreeMarker variable을 이제 사용자 정의할 수 있습니다.
이를 위해 FreeMarkerVariablesCustomizer
type의 bean을 하나 이상 정의합니다.
이러한 빈은 (있는 경우) 정의된 순서에 따라 호출됩니다.
Embedded Broker support with ActiveMQ Classic
이제 ActiveMQ Classic에서 embedded brocker를 다시 지원하므로 auto-configuration도 이를 지원하도록 업데이트되었습니다.
Spring Boot 2.7.x와 달리 ActiveMQ starter는 client 전용입니다.
embedded brocker를 사용하려면 org.apache.activemq:activemq-broker
를 application에 추가해야 합니다.
Configuration Metadata
Enum
의 default value는 이제 annotation processor에서 감지됩니다.
custom property를 제공하기 위해 manual metadata를 추가한 경우 제거해야 합니다.
Deprecating and Replacing Auto-configuration Classes
auto-configuration을 보다 쉽게 발전시킬 수 있도록 auto-configuration class를 더 이상 사용하지 않고 교체할 수 있는 지원이 도입되었습니다.
교채는 새로운 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements
file에서 선언할 수 있습니다.
자세한 내용은 reference documentation 을 참조하세요.
Base64 Resource Support and Automatic ProtocolResolver registration
이제 Resource
에 설정된 모든 property는 이제 명시적으로 등록할 필요 없이 Base64ProtocolResolver
를 사용할 수 있습니다.
예를 들어, 이제 Resource를 사용하여 SAML2에 의존하는 당사자 서명 자격 증명의 인증서 위치를 지정할 수 있습니다:
spring:
security:
saml2:
relyingparty:
registration:
keycloak:
entity-id: "saml-test"
signing:
credentials:
- private-key-location: classpath:local.key
certificate-location: base64:LS...
org.springframework.core.io.ProtocolResolver
key 아래 META-INF/spring.factories
file에 protocol resolver를 추가하여 쉽게 자체 protocol resolver를 추가할 수도 있습니다.
Virtual Threads
virtual thread가 활성화된 경우 다음 component에서 해당 thread가 사용됩니다:
OtlpMeterRegistry
- Undertow web server
Image Building Improvements
Spring Boot는 이제 기본적으로 paketobuildpacks/builder-jammy-java-tiny
를 사용합니다.
이 builder는 ARM
및 x64
platform을 기본적으로 지원합니다.
OCI image를 빌드하기 위한 Maven 및 Gradle plugin에 trustBuilder
option이 추가되었습니다.
이 option은 CNB lifecycle이 호출되는 방식을 제어하여 신뢰할 수 없는 source의 builder를 사용할 때 보안을 향상시킵니다.
기본적으로 Paketo project, Heroku, 및 Google의 builder는 신뢰할 수 있습니다.
자세한 내용은 Maven 또는 Gradle 문서를 참조하세요.
OCI image를 빌드하기 위한 Maven 및 Gradle plugin에 imagePlatform
option이 추가되었습니다.
이 option은 CNB buildpack을 실행하기 위해 가져온 모든 CNB builder, 실행 및 buildpack image의 운영 체제와 아키텍처를 지정하는데 사용할 수 있습니다.
host platform이 다른 OS/architecture의 emulation을 지원하는 경우 host platform의 OS/architecture와 다른 operation system 및 architecture의 image를 빌드하는 데 사용할 수 있습니다.
(예: Apple silicon에 탑재된 Mac에서 Rosetta 를 사용하여 ARM host에서 AMD architecture를 emulation 하는 경우)
자세한 내용은 Maven 또는 Gradle 문서를 참조하세요.
Docker Compose Improvements
Docker Compose는 이제 여러개의 Docker Compose configuration file을 지원합니다.
Command Line Arguments
새로운 properties인 spring.docker.compose.start.arguments
및 spring.docker.compose.stop.arguments
를 사용하면 service를 시작하거나 중지할 때 Docker Compose 하위 명령에 전달되는 추가 command line argument를 지정할 수 있습니다.
Docker Compose에 argument를 전달하기 위해 새로운 spring.docker.compose.arguments
property가 추가되었습니다.
Updated Support
- Postgres https://github.com/docker-library/docs/tree/657557822ecebebf0fa6bea96536125881c5bfb2/postgres#postgres_host_auth_method[`POSTGRES_HOST_AUTH_METHOD=trust` environment variable] 가 이제 지원됩니다.
- 각각
redis/redis-stack
및redis/redis-stack-server
container image를 사용하여 Redis Stack 및 Redis Stack Server에 대한 지원이 추가되었습니다. grafana/otel-lgtm
container image를 사용하여 Grafana LGTM 에 대한 지원이 추가되었습니다.- Hazelcast에 대한 지원이 추가되었습니다. (
HazelcastConnectionDetails
를 사용) - OTLP logging에 대한 지원이 추가되었습니다.
Testcontainers Improvements
org.testcontainers.kafka.KafkaContainer
에 대한 지원이 추가되었습니다.- 각각
redis/redis-stack
및redis/redis-stack-server
container image를 사용하여 Redis Stack 및 Redis Stack Server에 대한 지원이 추가되었습니다. org.testcontainers.grafana.LgtmStackContainer
에 대한 지원이 추가되었습니다.- Hazelcast에 대한 지원이 추가되었습니다. (
HazelcastConnectionDetails
를 사용) - OTLP logging에 대한 지원이 추가되었습니다.
RedisContainer
에 대한 지원이 추가되었습니다.
Actuator
Pluggable Actuator Exposers
이제 Spring Boot를 확장하여 plug 방식으로 actuator endpoint를 expose 할 수 있습니다.
새로운 EndpointExposureOutcomeContributor
interface를 구현하면 @ConditionalOnAvailableEndpoint
condition에 영향을 미칠 수 있습니다.
이 확장 기능을 사용하면 기존 Cloud Foundry 지원과 유사한 추가 platform 통합을 보다 쉽게 제공할 수 있습니다.
SSL information and health check
SSL bundle을 사용하는 경우 이제 /actuator/info
에서 사용가능한 SSL infomation(validity dates, issuer, subject 등)를 표시하는 새 endpoint가 있습니다.
이 endpoint는 곧 만료될 인증서를 표시하여 곧 rotation해야 한다는 경고를 제공합니다.
threshold를 구성하기 위한 management.health.ssl.certificate-validity-warning-threshold
라는 새로운 configuration property가 있습니다.
SSL 인증서를 모니터링하는 새로운 health check monitoring도 추가되었습니다.
인증서가 유효하지 않으면 status를 OUT_OF_SERVICE
로 설정합니다.
Additional info in /actuator/scheduledtasks
endpoints
/scheduledtasks
Actuator endpoint 는 이제 "next scheduled execution time" 및 "last execution time, status and exception" 과 같은 예약된 작업에 대한 추가 metadata를 노출합니다.
Dependency Upgrades
Spring Boot 3.4는 여러 Spring projects의 새로운 버전으로 전환됩니다.:
- Spring AMQP 3.2
- Spring Authorization Server 1.4
- Spring Batch 5.2
- Spring Data 2024.1
- Spring Framework 6.2
- Spring HATEOAS 2.4
- Spring Integration 6.4
- Spring Kafka 3.3
- Spring Pulsar 1.2
- Spring Security 6.4
- Spring Session 3.4
또한 수많은 third-party 종속성도 업데이트 되었는데 그 중 주목할만한 것은 다음과 같습니다:
- Apache Http Client 5.4
- AssertJ 3.26
- Artemis 2.37
- Elasticsearch Client 8.15
- Flyway 10.20
- Gson 2.11
- Hibernate 6.6
- HtmlUnit 4.5.0
- JUnit Jupiter 5.11
- Jackson 2.18.0
- Jedis 5.2
- Kafka 3.8
- Lettuce 6.4
- Liquibase 4.29
- Log4j 2.24
- HtmlUnit 4.3
- MariaDB 3.4
- Micrometer 1.14
- Micrometer Tracing 1.4
- Mockito 5.13
- MongoDB 5.2.0
- MySQL 9.1
- OpenTelemetry 1.41
- Oracle Database 23.4
- R2DBC MySQL 1.3
- Rabbit AMQP Client 5.22
- Rabbit Stream Client 0.18.0
- Reactor 2024.0
- Selenium 4.25
- Testcontainers 1.20.3
- XMLUnit 2.10
Miscellaneous
위에 나열된 변경 사항 외에도 다음을 포함하여 많은 사소한 조정 및 개선 사항이 있었습니다:
- 이제 Liquebase를 사용하기 전에
Customizer<Liquibase>
bean을 사용하여 Liquebase를 customize 할 수 있습니다. - JCache
CacheManager
를 생성하는데 사용된 properties는 이제JCachePropertiesCustomizer
bean을 정의하여 customize 할 수 있습니다. - Spring MVC에서 사용하는
RequestToViewNameTranslator
는 이제viewNameTranslator
라는 이름의 bean을 정의하여 customize 할 수 있습니다. - Lettuce의
ClientOptions
는 이제LettuceClientOptionsBuilderCustomizer
bean을 사용하여 customize 할 수 있습니다. - Lettuce's
ClientOptions
can now be customized using aLettuceClientOptionsBuilderCustomizer
bean.
전체LettuceClientConfiguration
의 더 광범위한 구성을 위해LettuceClientConfigurationBuilderCustomizer
를 계속 사용하세요. - 새로운 customizer
ProxyConnectionFactoryCustomizer
를 사용하면 R2DBCProxyConnectionFactory
를 customize 할 수 있습니다. - 이제 Spring Security logout이 발생하면 audit event가 게시됩니다.
- 이제
JavaMailSender
의 TLS는 새로운 properties인spring.mail.ssl.*
를 사용하여 SSL bundle로 구성할 수 있습니다. - GSON의 엄격성(strictness)은 새로운
spring.gson.strictness
property를 사용하여 구성할 수 있습니다. - 이제
@Name
을 JavaBean-style configuration property의 field에서 사용하여 해당 이름을 customize 할 수 있습니다. - 다른
DataSource
에서 파생된 경우DataSourceBuilder
는 Driver class name을 노출하지 않는 경우 source DataSource의 URL을 사용하여 Driver class name을 확인할 수 있습니다. - 이제 Cloud Foundry 플랫폼에서 liveness 및 readiness health probe 가 자동으로 활성화됩니다.
- 새로운 property
spring.application.version
은 application version을 읽고 설정하는데 사용할 수 있습니다.
property의 default value는 manifest의Implementation-Version
에서 가져옵니다. - auto-configure 된
EntityManagerFactoryBuilder
는 native (예: Hibernate) properties도 정의합니다. - Spring Integration의
TaskScheduler
는 이제@EnableScheduling
이 사용되지 않았더라도 virtual thread를 인식합니다. @ConditionalOnAvailableEndpoint
에 이제endpoint
에 대한value
가 추가되었습니다.- Spring Data Web의 serialization mode를 구성하기 위한 새로운 configuration property,
spring.data.web.pageable.serialization-mode
가 추가되었습니다. SpringApplication.from(...)
syntax를 사용하면 이제 activate 할 추가 profile을 지정할 수 있습니다.- Spring Boot plugin은 더 이상 buildpack environment에서
BP_NATIVE_IMAGE: true
를 설정하지 않습니다. - 등록된
@ConfigurationProperties
bean은 이제@DependsOn
,@Description
,@Fallback
,@Lazy
,@Primary
,@Scope
및@Role
annotation을 존중(respect)합니다. - Log4j2의
MultiFormatStringBuilderFormattable
이 이제 structured logging에서 지원됩니다. - 하나의 작업에서 listener가 처리하는 최대 message 수를 구성하기 위한 해로운 configuration property,
spring.jms.listener.max-messages-per-task
가 추가되었습니다. - default security configuration은 이제 추가 경로에 mapping 된 health group을 expose합니다.
또한 두EndpointRequest
class 모두 이제toAdditionalPaths(...)
method를 제공합니다. - session cookie의 partitioned attribute를 이제 properties를 통해 설정할 수 있습니다.
- Jetty의 max form keys를 customize 하기 위해 새로운
server.jetty.max-form-keys
property가 추가되었습니다. - OLTP collector에 대한 connect timeout을 구성하기 위한 새로운 properties
management.otlp.logging.connect-timeout
및management.otlp.tracing.connect-timeout
가 추가되었습니다. - OLTP를 통해 log를 전송할 때 gRPC 전송에 대한 지원이 추가되었습니다.
- build process에서 buildpack에 의해 사용되는 container의 directory를 binding 할 때 이제 warning이 표시됩니다.
--enable-sbom=sbom
을 사용하여 native image를 build할 때 이제 이 SBOM이 자동으로 감지 됩니다.DatabaseDriver
enum은 이제 ClickHouse JDBC driver를 지원합니다.- 새로운 properties
management.logging.export.enabled
및management.otlp.logging.export.enabled
를 사용하여 log export를 비활성화 할 수 있습니다. - Spring Batch에서 사용하는
TaskExecutor
는@BatchTaskExectuor
annotation이 달린TaskExecutor
bean을 정의하여 customize 할 수 있습니다. - Spring Session auto-configuration은 이제 reactive web application에서
indexed
repository type을 지원합니다. - pool suspension이 구성되지 않고 checkpoint가 생성되면
HikariCheckpointRestoreLifecycle
에서 warning이 log됩니다.
Deprecations in Spring Boot 3.4
spring.gson.lenient
는spring.gson.strictness
로 대체됩니다.@MockBean
및@SpyBean
은 각각 Spring Framework의@MockitoBean
및MockitoSpyBean
으로 대체됩니다.org.springframework.boot.ResourceBanner#getApplicationVersion(Class<?>)
는spring.application.version
property로 대체됩니다..org.springframework.boot.SpringApplication#logStartupInfo(boolean)
은org.springframework.boot.SpringApplication#logStartupInfo(ConfigurationApplicationContext)
로 대체됩니다.org.springframework.boot.logging.logback.ApplicationNameConverter
는org.springframework.boot.logging.logback.EnclosedInSquareBracketsConverter
로 대체됩니다.org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure#CLOUD_FOUNDRY
는org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure#WEB
으로 대체됩니다.org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails#getUrl()
은getUrl(Transport)
로 대체됩니다.org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration
은org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryTracingAutoConfiguration
으로 대체됩니다.OtlpAutoConfiguration
은OtlpTracingAutoConfiguration
으로 대체됩니다.management.endpoints.enabled-by-default
및management.endpoint.<id>.enabled
는 각각management.endpoints.access.default
및management.endpoint.<id>.access
로 대체됩니다.@Endpoint
의enableByDefault
는defaultAccess
로 대체됩니다.
'Study > Java' 카테고리의 다른 글
hibernate SqlType.JSON (json data) 사용해 보기 (0) | 2024.11.18 |
---|---|
Spring Cloud Context의 @RefreshScope를 사용하여 properties 설정 갱신하기 (0) | 2024.11.17 |
springdoc swagger ui에 authorize 사용해 보기 (0) | 2024.11.07 |
JDK 23 New Features (0) | 2024.10.07 |
spring-boot-properties-migrator로 custom property report 하기 (0) | 2024.06.16 |
Antora 사용해 보기 (0) | 2024.06.12 |
Spring Boot 3.3 Release Notes (0) | 2024.05.30 |
SonarQube, SonarLint issue 예외 처리하기 (0) | 2024.05.11 |
JDK 22 New Features (0) | 2024.03.21 |
Eclipse (STS) 에서 Parameter Name Hint 사용하기 (0) | 2024.03.08 |