파란하늘의 지식창고
Published 2024. 12. 3. 19:22
Spring Boot 3.4 Release Notes Study/Java
반응형

전체 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 를 사용하도록 RestClientRestTemplate 을 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, jdksimple 입니다.

다섯 client 모두 기본적으로 redirect를 따릅니다.
이 동작을 비활성화하려면 spring.http.client.redirectsdont-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인 valueannotation 을 모두 지정합니다.

Graceful Shutdown

embedded web server(Jetty, Rector Netty, Tomcat, 또는 Undertow)의 Graceful shutdown이 이제 기본적으로 활성화되었습니다.
이전 동작을 복원해야 하는 경우 server.shutdownimmediate 로 설정합니다.

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-injectionwarn 또는 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

마찬가지로, @EndpointenableByDefault attribute는 더 이상 사용되지 않으며 새로운 defaultAccess attribute로 대체되었습니다.

이러한 변경 사항의 일부로 enabled-by-default 는 이제 @ConditionalOnEnabledEndpoint 사용 여부와 관계없이 일관되게 적용됩니다.
업그레이드하는 동안 endpoint에 대한 access 권한을 잃은 경우 management.endpoint.<id>.accessread-only 또는 unrestricted 로 설정하거나 management.endpoint.<id>.enabledtrue 로 설정하여 endpoint에 다시 access 할 수 있도록 합니다.

또한, 운영자가 Actuator endpoint에 허용되는 access 수준을 제어할 수 있도록 하는 새로운 property가 도입되었습니다.

  • management.endpoints.access.max-permitted

이 property는 endpoint에 대해 구성된 모든 access를 제한합니다.

예를 들어, management.endpoints.access.max-permittedread-only 로 설정되고 management.endpoint.loggers.accessunrestricted 로 설정된 경우 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.fileecs, 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.transportgrpc 로 설정합니다.
이 property는 default로 http 가 설정됩니다.
이에 대한 service connection 지원도 추가되었습니다.

management.otlp.logs 아래의 새 properties를 사용하여 OpenTelemetry의 OtlpHttpLogRecordExporterSdkLoggerProvider 를 auto-configure 할 수 있습니다.

Other Observability Updates

이제 ProcessInfoContributor 는 heap 및 non-heap 사용에 대한 memory info도 보여줍니다.

새로운 management.otlp.tracing.export.enabled, management.wavefront.tracing.export.enabledmanagement.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.tenantspring.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는 ARMx64 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.argumentsspring.docker.compose.stop.arguments 를 사용하면 service를 시작하거나 중지할 때 Docker Compose 하위 명령에 전달되는 추가 command line argument를 지정할 수 있습니다.
Docker Compose에 argument를 전달하기 위해 새로운 spring.docker.compose.arguments property가 추가되었습니다.

Updated Support

Testcontainers Improvements

  • org.testcontainers.kafka.KafkaContainer 에 대한 지원이 추가되었습니다.
  • 각각 redis/redis-stackredis/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의 새로운 버전으로 전환됩니다.:

또한 수많은 third-party 종속성도 업데이트 되었는데 그 중 주목할만한 것은 다음과 같습니다:

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 a LettuceClientOptionsBuilderCustomizer bean.
    전체 LettuceClientConfiguration 의 더 광범위한 구성을 위해 LettuceClientConfigurationBuilderCustomizer 를 계속 사용하세요.
  • 새로운 customizer ProxyConnectionFactoryCustomizer 를 사용하면 R2DBC ProxyConnectionFactory 를 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-timeoutmanagement.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.enabledmanagement.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.lenientspring.gson.strictness 로 대체됩니다.
  • @MockBean@SpyBean 은 각각 Spring Framework의 @MockitoBeanMockitoSpyBean 으로 대체됩니다.
  • 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.ApplicationNameConverterorg.springframework.boot.logging.logback.EnclosedInSquareBracketsConverter 로 대체됩니다.
  • org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure#CLOUD_FOUNDRYorg.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.OpenTelemetryAutoConfigurationorg.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryTracingAutoConfiguration 으로 대체됩니다.
  • OtlpAutoConfigurationOtlpTracingAutoConfiguration 으로 대체됩니다.
  • management.endpoints.enabled-by-defaultmanagement.endpoint.<id>.enabled 는 각각 management.endpoints.access.defaultmanagement.endpoint.<id>.access 로 대체됩니다.
  • @EndpointenableByDefaultdefaultAccess 로 대체됩니다.
반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요