Spring Boot 2.0 에서 deprecated 된 클래스, 메소드, properties 는 지워짐. 확인해봐라
Spring Framework 5.1
버전업
Bean Overriding
Bean overriding 은 우연히 overridden 되는걸 방지하기 위해 기본적으로 disabled 되어 있음. 하고싶으면spring.main.allow-bean-definition-overriding 을 true 로 설정해라
Auto-Configuration Exclusion
Exclusions 는 locally 뿐만아니라 일관성 있게 적용된다 @EnableAutoConfiguration, @SpringBootApplication, @ImportAutoConfiguration 또는 spring.autoconfigure.exclude property 에 정의돈 모든 exclusion 에 적용
Actuator 'info' and 'health' Endpoint Security
spring-security 에서 어떤 설정과 관련없이 /info and /health 가 공개적으로 노출된다.
Servlet Path
server.servlet.path property 가 spring.mvc.servlet.path 로 바뀜.
@WebMvcTest and @WebFluxTest Security Configuration
User configuration 이 slice tests 에 자동 포함 됨. @WebMvcTest 는 WebSecurityConfigurer beans 을 찾고 @WebFluxTest 는 ServerHttpSecurity beans 을 찾음
Logging Refinements
debug 아웃풋 로깅을 개선 함. Spring Boot 2.0 스타일로 돌아가고 싶다면
logging.level.web=debug
요청 세부 사항을 보고 싶다면, spring.http.log-request-details 를 true 로 하라
Narayana JTA Support
spring-boot-starter-jta-narayana 로 바뀌었음
Narayana? : 분산 데이터베이스 환경에서 트랜잭션을 처리해주는 오픈소스
ActiveMQ Pooling
activemq-pool 은 제거되고, pooled-jms 로 대체 됨
HttpPutFormContentFilter
HttpPutFormContentFilter deprecated
OAuth2 Client Configuration
spring.security.oauth2.client.registration 을 재작업 했음
Micrometer 'all' SLA Handling
management.metrics.distribution.sla 의 all 이 SLA 모든 메트릭에 설정할 수 있다고 잘못 설명 함
InfluxDB HttpClient Customization
기존에는 OkHttpClient.Builder로 InfluxDB bean 를 커스터마이징 했는데, 앞으로는 InfluxDbOkHttpClientBuilderProvider 이걸로 해라
Maven Plugin
finalName property 는 이제 쓰지 마라
repackage 조금 달라졌으니 살펴봐라
Spring Version POM Property
기존에는 spring-boot-dependencies POM 에서 spring.version property 로 설정했다. 이제는 spring-framework.version 로 하면 된다. 근데 꼭 필요한거 아니면, 손대지 말고 관리되는 프레임워크 버전을 써라
Removal of 'spring.provides' Files
starter 는 META-INF/spring.provides 로 디펜던시 파악을 했으나, 이제는 굳이 필요 없어서 없앰
Thymeleaf Spring Security Extras
Thymeleaf의 Spring Security Extras module 종속성 및 자동구성 관리가 thymeleaf-extras-springsecurity4 에서 thymeleaf-extras-springsecurity5 로 바뀜
Json Simple
json-simple deprecated
Jersey 1
Jersey 1 은 지원 안함. Jersy 2 로 업그레이드 해라
Hibernate EhCache Support
Hibernate 5.3 에서는 hibernate-ehcache 로 EhCache 2 를 통해 second-level cache 사용을 이제 못함
Endpoint ID names
독자적인 @Endpoint 를 만들었다면, Spring Boot 2.1 네이밍 룰을 정책을 따라야 한다. ID 는 alpha-numeric 이어야 하고, 문자로 시작해야 한다.
- or . 는 warning
Lombok
Lombok 1.18.x 로 올라갔는데, no-args constructor 를 기본적으로 지원 안한다
lombok.config 에서 lombok.noArgsConstructor.extraPrivate=true 할수 있다
Profile matching 이 개선 되었다. production & (us-east | eu-central) 이런식의 표현 가능
사용 가능한 곳
@Profile
YAML
Logback <springProfile>
Task Execution
@EnableAsync로 ThreadPoolTaskExecutor 자동 구성 제공
@EnableAsync 사용할 경우, spring.task.scheduling 에서 커스텀 TaskExecutor를 뺄 수 있다.
TaskExecutorBuilder 로 ThreadPoolTaskExecutor 를 쉽게 생성 가능
Task Scheduling
@EnableScheduling 하면 ThreadPoolTaskScheduler 자동 구성 됨
spring.task.scheduling 로 커스터마이징 가능
Logging Groups
Logger groups 정의 가능
# define the group
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
use the group (possibly in a different configuration file)
logging.level.tomcat=TRACE
* 편리한 `web`, `sql` groups 가 기본 제공(out-of-the-box) 된다
### Maven Plugin
* system properties, environment variables 의 아규먼트가 개선 되었으니 문세 참고해라
### Bootstrap mode for JPA setup
* Spring Data Lovelace 에서 `bootstrap mode` 모드 지원함
* JPA 부트스트랩 모드를 제어하는 예제
### Kafka Streams Support
* Kafa Streams 지원 가능. 자세한 내용은 문서 참고하라
### Spring Data JDBC Support
* Spring Data 에서 JDBC repository 지원, `CrudRepository` 에서 SQL 를 자동 생성한다.
### JMS ConnectionFactory Caching
* `CachingConnectionFactory` 에서 `ConnectionFactory` 가 자동 구성 됨 (spring.jms.cache.enabled=false 면 안함)
* Pooling 옵션에 Artemis 추가. (spring.jms.artemis.pool.*)
### Elasticsearch REST Clients
* Jest 대안으로 `RestClient` 와 `RestHighLevelClient` 가 제공된다
### JUnit 5
* 모든 `@…Test` 는 ` @ExtendWith(SpringExtension.class)` 에 있으므로, 이제 중복으로 안해줘도 된다
* `maven-surefire-plugin` 안쓰므로 별도의 JUnit 5 설정이 필요
### Security
#### OAuth2 WebFlux Support
* WebFlux OAuth2 login 추가
#### OAuth2 resource server support
* `spring-security-oauth2-resource-server` 가 classpath 에 있고 JWK Set URI 가 지정되어 있으면, OAuth2 Resource Server 를 설정할 수 있다
#### Non-web OAuth Applications
* `InMemoryReactiveClientRegistrationRepository` 이 제공되고 non-web OAuth 애플리케이션을 쉽게 작성가능하다.
* 내장 웹서버를 사용하지 않을때 (CLI 애플리케이션) 쉽게 주입가능하다
### Actuator Endpoints
#### Caches Endpoint
* 사용 가능한 `CacheManager` 을 나열 가능 `/actuator/caches`
### Spring Integration Graph Endpoint
* Spring Integration 을 사용하면 `/actuator/integrationgraph` 로 그래프 표시 가능
#### Health Endpoint
* `HealthIndicatorRegistry` 으로 런타임 시 `HealthIndicator` 를 추가하고 제거 가능.
* 특정 지표를 쿼리 하도록 `health` endpoint 도 개선 됨
* `/actuator/health/db` 는 "db" HealthIndicator 만 실행 함
* Apache Cassandra 를 위한 reactive `HealthIndicator` 사용 가능
### Micrometer
#### Common Micrometer Tags
* Common 태그를 모든 meters 에 선언적으로 사용 가능
* 모든 meters에 `region` and `stack` 값을 추가 함
#### Auto-configuration Support For New Metrics
* 지표 범위가 개선 됨
* Hibernate metrics
* Spring Framework’s WebClient
* Kafka consumer metrics
* Log4j2 metrics
* Jetty server thread pool metrics
* Server-side Jersey HTTP request metrics
#### Auto-configuration support for new registries
* classpath 에 있다면 자동 구성 됨
* AppOptics
* Humio
* KariosDB
* Prometheus push gateway 추가 됨
#### Additional histogram configuration properties
* 새로운 `management.metrics.distribution.maximum-expected-value.*` 와 `management.metrics.distribution.minimum-expected-value.*` properties 로 미터 단위의 최소 최대값 조절 가능
### Miscellaneous
사소한 조정 및 개선 사항
* Jackson visibility 를 `spring.jackson.visiblity.*` 로 구성 가능
* 자동 구성된 `WebServiceTemplateBuilder` 로 `WebServiceTemplate` 를 만드는게 더 쉽다
* Devtools 사용할때에는 에러 페이지에 스택트레이스가 나옴
* Jersey 를 활성화 하기 위해 더이상 더미 `ResourceConfig` 를 export 안해도 됨
* 기본적으로 `resourceRef` 를 사용하도록 JNDI lookups 가 개선 됨
* Rabbit 인프라에서 사용하는 `RetryTemplate` 커스터마이징은 `RabbitRetryTemplateCustomizer` 로 하면 된다
* default `RabbitTemplate` 의 receive 큐를 구성 가능
* Tomcat’s max swallow size 는 이제 property 로 구성 가능
* HTTP/2 with Reactor Netty Server is now supported.
* Kafka auto-configuation 에서 `errorHandler` `transactionManager` and `afterRollbackProcessor` beans 지원
* 전역으로 unique JMX ObjectNames 생성 가능 (이 기능을 Actuator Endpoints 로 제한하지 않고)
* Configuration property meta-data 가 deprecated 된 마지막 아이템과 함께 정렬됨(?)
* `Health.Builder` 의 `withDetails` 메소드에서도 `Map` 승인 함
* issuer 가 정의되어 있으면 reactive `ReactiveJwtDecoder` 가 자동구성 됨
* `spring.backgroundpreinitializer.ignore` 이 설정되어 있으면 `BackgroundPreinitializer` 가 비활성화 됨
* `HiddenHttpMethodFilter` 는 property 로 비활성화 가능
* JAP starter POM 은 Java 9+ 에서 기본동작 함
* `com.mongodb.client.MongoClient` 가 정의되어 있으면 자동구성이 안됨
* 선택적으로 Jetty RS as HTTP driver for WebClient 사용 가능
* `spring.quartz` namespace 에 여러 구성 옵션이 추가 됨
* `@ConditionalOnEnabledEndpoint` 는 모든 구성요소에서 사용할 수 있다
* `Filter ` bean 이 missing 인지 `@ConditionalOnMissingServletFilter` 로 테스트 가능
* @WebMvcTest는 스프링 데이터 REST도 자동 구성합니다 (Sort, Pageable)
* Slice 테스트에서 환경을 일관되게 정의하기 위한 `properties` 이 있다
* 멀티플 `RestDocsMockMvcConfigurationCustomizer` 지원 함
* Security 구성이 `WebTestClient` 에 적용된다. 자세한건 문서 참고
* @WebFluxTest에서 WebExceptionHandlers가 지원됩니다.
* @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT)는 이제 관리 서버에 대해 별도의 임의 포트를 생성 할 수 있습니다.
* Auto-configuration 제외가 이제 일관되게 적용됩니다.
## Deprecations in Spring Boot 2.1
* setConnectTimeout (int) 및 setReadTimeout (int)는 Duration 를 위해 더 이상 사용되지 않습니다.
* `int` 로 데이터 사이즈를 설정하는 Methods 는 안쓰고 대신에 DataSize 를 써라
* management.endpoints.jmx.unique-names -> spring.jmx.unique-names
* Spring Security의 @WithMockUser 주석을 사용하기 위해 @AutoConfigureMockMvc의 보안 속성이 더 이상 사용되지 않습니다.
* RestTemplateBuilder.basicAuthorization은 basicAuthentication을 위해 더 이상 사용되지 않습니다.
* REQUEST_WRAPPER_FILTER_MAX_ORDER in AbstractFilterRegistrationBean and FilterRegistrationBean -> OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER.
## Configuration Property Changes
* spring.security.oauth2.client.registration.login.*.redirect-uri-template -> spring.security.oauth2.client.registration.login.*.redirect-uri
* spring.security.oauth2.resource.jwt.jwk.set-uri -> spring.security.oauth2.resourceserver.jwt.jwk-set-uri
* spring.cloud.enabled 속성이 제거되었습니다 (클라우드 커넥터를 비활성화해야하는 경우 CloudServiceConnectorsAutoConfiguration 로 제외).
* auto-configuration을 직접 제외하기 위해 모든 `management.metrics.binders. *. enabled` properties가 제거되었습니다.
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes
Upgrading from Spring Boot 2.0
Deprecations from Spring Boot 2.0
Spring Framework 5.1
Bean Overriding
spring.main.allow-bean-definition-overriding
을 true 로 설정해라Auto-Configuration Exclusion
spring.autoconfigure.exclude
property 에 정의돈 모든 exclusion 에 적용Actuator 'info' and 'health' Endpoint Security
spring-security
에서 어떤 설정과 관련없이/info
and/health
가 공개적으로 노출된다.Servlet Path
server.servlet.path
property 가spring.mvc.servlet.path
로 바뀜.@WebMvcTest and @WebFluxTest Security Configuration
Logging Refinements
debug
아웃풋 로깅을 개선 함. Spring Boot 2.0 스타일로 돌아가고 싶다면spring.http.log-request-details
를true
로 하라Narayana JTA Support
spring-boot-starter-jta-narayana
로 바뀌었음ActiveMQ Pooling
activemq-pool
은 제거되고,pooled-jms
로 대체 됨HttpPutFormContentFilter
HttpPutFormContentFilter
deprecatedOAuth2 Client Configuration
spring.security.oauth2.client.registration
을 재작업 했음Micrometer 'all' SLA Handling
management.metrics.distribution.sla
의all
이 SLA 모든 메트릭에 설정할 수 있다고 잘못 설명 함InfluxDB HttpClient Customization
OkHttpClient.Builder
로 InfluxDB bean 를 커스터마이징 했는데, 앞으로는InfluxDbOkHttpClientBuilderProvider
이걸로 해라Maven Plugin
finalName
property 는 이제 쓰지 마라repackage
조금 달라졌으니 살펴봐라Spring Version POM Property
spring-boot-dependencies
POM 에서spring.version
property 로 설정했다. 이제는spring-framework.version
로 하면 된다. 근데 꼭 필요한거 아니면, 손대지 말고 관리되는 프레임워크 버전을 써라Removal of 'spring.provides' Files
META-INF/spring.provides
로 디펜던시 파악을 했으나, 이제는 굳이 필요 없어서 없앰Thymeleaf Spring Security Extras
thymeleaf-extras-springsecurity4
에서thymeleaf-extras-springsecurity5
로 바뀜Json Simple
json-simple
deprecatedJersey 1
Hibernate EhCache Support
hibernate-ehcache
로 EhCache 2 를 통해 second-level cache 사용을 이제 못함Endpoint ID names
@Endpoint
를 만들었다면, Spring Boot 2.1 네이밍 룰을 정책을 따라야 한다. ID 는 alpha-numeric 이어야 하고, 문자로 시작해야 한다.-
or.
는 warningLombok
Java Persistence API dependency
org.hibernate.javax.persistence:hibernate-jpa-2.1-api
->javax.persistence:javax.persistence-api
JpaProperties
JpaProperties
->HibernateProperties
HibernateProperties
,JpaProperties
둘다 넣어줘야 함Consistent max HTTP header size across all embedded web servers
server.max-http-header-size
로 조절 가능New and Noteworthy
Third-party Library Upgrades
Java 11 Support
DataSize Support
org.springframework.util.unit.DataSize
로 편리한 사이즈로 입력 가능 (i.i. 10MB)Context ApplicationConversionService Support
ApplicationConversionService
로@Value
에서 컨버터 바로 적용 가능Profile Expression
production & (us-east | eu-central)
이런식의 표현 가능@Profile
YAML
<springProfile>
Task Execution
@EnableAsync
로ThreadPoolTaskExecutor
자동 구성 제공@EnableAsync
사용할 경우,spring.task.scheduling
에서 커스텀TaskExecutor
를 뺄 수 있다.TaskExecutorBuilder
로ThreadPoolTaskExecutor
를 쉽게 생성 가능Task Scheduling
@EnableScheduling
하면ThreadPoolTaskScheduler
자동 구성 됨spring.task.scheduling
로 커스터마이징 가능Logging Groups
use the group (possibly in a different configuration file)
logging.level.tomcat=TRACE
spring.data.jpa.repositories.bootstrap-mode=deferred
spring.security.oauth2.resource.jwt.jwk.set-uri=https://example.com/oauth2/default/v1/keys
management.metrics.tags.region=us-east-1 management.metrics.tags.stack=prod