일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 예외처리
- spring security and angularjs
- api documentation
- swagger-ui
- 스프링
- Authentication
- 스프링 부트
- 스웨거
- 스프링 시큐리티와 앵귤러 js
- 앵귤러JS
- spring framwork
- Spring Security
- AUthorization
- angularjs
- 스프링 시큐리티
- spring session
- 레디스
- 스프링 세션
- api 문서화
- oauth2
- angular
- spring boot
- 스프링부트
- controlleradvice
- spring
- Exception Handling
- spring security oauth2
- 앵귤러
- Spring Framework
- rest api
- Today
- Total
스프링부트는 사랑입니다
스프링 부트 1.4 릴리즈 노트 본문
스프링 부트 1.4 릴리즈 노트 - 2017년 1월 19일
원문: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes
스프링부트 1.3이후 업그레이드된 것
스프링 부트 1.3에서 더이상 지원하지않는 것 Deprecations from Spring Boot 1.3
스프링 부트 1.3에서 디프리케이트된 클래스, 메소드, 프로퍼티들은 이번 릴리즈에서 제거되었다.업그레이드에 앞서 디프리케이트된 메소드를 호출하는지 먼저 확인해야한다.
Log4j 1 지원은 Apache EOL announcement 의거하여 제거되었다.
재명명된 스타터들 Renamed starters
다음의 스타터들의 이름이 변경되었다.기존의 이름은 스프링 부터 2.0에서 제거될 것이다.
spring-boot-starter-ws
→spring-boot-starter-web-services
spring-boot-starter-redis
→spring-boot-starter-data-redis
DataSourceProperties의 get 메소드들 DataSourceProperties get methods
DataSourceProperties
의 몇몇 get…
메소드들은 다른 @ConfigurationProperties
클래스들과 더 일관성있게 바뀌었다. 만약 이전에 다음의 메드들을 코드에 직접적으로 호출했었다면 동일한 기능의 새 determine…
로 바꿔줘야한다.
getDriverClassName()
→determineDriverClassName()
getUrl()
→determineUrl()
getUsername()
→determineUsername()
getPassword()
→determineUsername()
Note | The get 메소드는 디프리케이트 되이 않았다. 하지만 이들의 행동이 바뀌었기때문에 당신은 업그레이드할때 수동으로 확인해줘야한다. |
DataSource 바인딩 DataSource binding
spring.datasource
namespace. In 1.4, we only bind the common settings to spring.datasource
(seeDataSourceProperties
) and we have defined new specific namespaces for the four connections pools we support (in that order):DataSourceProperties
프링 부트 1.2에선 logging.config
를 써서 로깅 설정파일을 커스터마이즈할 수 있었다. 파일이 존스프링 부트 1.4 이전에는 자동설정된 datasource들은 spring.datasource 네임스페이스에 바인드되었다. 1.4부터 우리는 일반적인 설정만 spring.datasource에 바인드된다(DataSourceProperties를 보자) 그리고 우리가 지원하는 4개의 커넥션풀을 위한 새로운 특정 네임스페이스 정의하였다 (순서대로):org.apache.tomcat.jdbc.pool.DataSource
를 위한spring.datasource.tomcat
com.zaxxer.hikari.HikariDataSource
를 위한 spring.datasource.hikariorg.apache.commons.dbcp.BasicDataSource
를 위한spring.datasource.dbcp
org.apache.commons.dbcp2.BasicDataSource
를 위한 spring.datasource.dbcp2
testOnBorrow
플래그를 사용하고 있다면, spring.datasource.test-on-borrow
에서 spring.datasource.tomcat.test-on-borrow
로 옮겨줘야한다.만일 당신이 사용하는 IDE에서 설정을 도움받았다면, spring.datasource
네임스페이스에 이들을 모두 함께 사용하지않고 커넥션 풀당 어느 설정이 사용가는한지 볼 수 있다. 이는 어느 구현체가 어느 기능을 지원하는지 알아둬야 하는 당신의 삶을 더 쉽게 만들어줄 것이다.
JTA설정 바인딩 JTA settings binding
DataSource binding
과 유사하게 Atomikos와 Bitronix 를 위한 특정 JTA제공자 설정 프로퍼티가 spring.jta에 바인드 된다. 이들은 이제 spring.jta.atomikos.properties와 spring.jta.bitronix.properties에 각각 바인드 될 것이다; 이들 엔트리를 위한 메타데이터 또한 크게 향상되었다.
하이버네이트 5 Hibernate 5
하이버네이트 5는 이제 기본 JPA 퍼시스턴스 제공자로서 사용된다. 만일 스프링 부트 1.3에서 업그레이드한다면, 하이버네이트 4.3에서 5.0으로 바꿔줘야한다. 일반적인 업그레이드 방침은 Hibernate migration documentation를 참고하자. 추가적으로 당신은 다음의 것들을 알아둬야한다:
네이밍 전략 Naming Strategy
하이버네이트 5.1이 이전의
NamingStrategy 인터페이스를 지원을 삭제함으로서 SpringNamingStrategy
는 더이상 사용되지 않는다. 새로운 SpringPhysicalNamingStrategy
가 이제 자동설정되어 하이버네이트의 기본 ImplicitNamingStrategy
와 함께 사용된다. 이는 스프링부트 1.3의 기본설정과 매우 유사하다 (동일하진않다). 하지만 당신은 업그레이드시 데이터베이스 스키마가 올바른지 확인해주어야 할것이다.
만일 당신이 업그레이드 전 이미 하이버네이트 5를 사용중이라면, 아마 하이버네이트5의 기본설정을 사용하고 있을 것이다. 업그레이드 후에 이를 되돌리길 원하면 당신의 설정에 이 프로퍼티를 설정하면 된다:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
제네레이터 매핑 Generator mappings
업그레이드의 고통을 최소화하기 위해, 우리는 하이버네이트5의 hibernate.id.new_generator_mappings을 false를로 설정해두었다. 하이버네이트 팀은 보통 이 설정을 권장하지않는다. 따라서 당신이 제네레이터 변경을 따르려면 당신의 application.properties
파일에 hibernate.id.new_generator_mappings을 true로 설정하면 된다.
하이버네이트 4.3으로 다운그레이드 Downgrading to Hibernate 4.3
하이버네이트 5.0으로 업그레이드하는데 문제가 있다면, pom.xml
파일의 hibernate.version
프로퍼티를 오버라이딩함으로서 예전 버젼의 하이버네이트로 다운그레이드 할 수 있다.
<properties> <hibernate.version>4.3.11.Final</hibernate.version> </properties>
또는 그레들을 사용한다면 hibernate.version
프로퍼티를 다음과 같이 오버라이딩하면 된다:
ext['hibernate.version'] = '4.3.11.Final'
Note | 하이버네이트 4.3 은 스프링부터 1.4에서 지원하지 않는다 업그레이드를 방해하는 버그가 있다면 이슈를 제기하자. |
@EntityScan
@org.springframework.boot.orm.jpa.EntityScan
어노테이션은 디프리케이트 되어 @org.springframework.boot.autoconfigure.domain.EntityScan
로 변경해주거나 외부 설정을 해주어야한다.
예를 들어 만일 다음의 설정을 가지고 있다면:
import org.springframework.boot.autoconfigure.SpringApplication;
import org.springframework.boot.orm.jpa.EntityScan;
@SpringBootApplication
@EntityScan(basePackageClasses=Customer.class)
public class MyApplication {
// ....
}
만일 자동설정된 LocalContainerEntityManagerFactoryBean
을 사용중이라면 다음과 같이 바꿔준다:
import org.springframework.boot.autoconfigure.SpringApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
@SpringBootApplication
@EntityScan(basePackageClasses=Customer.class)
public class MyApplication {
// ....
}
또는 스스로 LocalContainerEntityManagerFactoryBean
을 설정중이라면, @EntityScan
어노테이션을 통째로 버리고 LocalContainerEntityManagerFactoryBean.setPackagesToScan(…)
를 호출하거나 또는 EntityManagerFactoryBuilder
packages(…)
메소드를 사용해야한다:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(...)
.properties(...)
.packages(Customer.class)
.build();
}
@org.springframework.boot.orm.jpa.EntityScan
어노테이션은 디프리케이트 되어 @org.springframework.boot.autoconfigure.domain.EntityScan
로 변경해주거나 외부 설정을 해주어야한다.
예를 들어 만일 다음의 설정을 가지고 있다면:
import org.springframework.boot.autoconfigure.SpringApplication; import org.springframework.boot.orm.jpa.EntityScan; @SpringBootApplication @EntityScan(basePackageClasses=Customer.class) public class MyApplication { // .... }
만일 자동설정된 LocalContainerEntityManagerFactoryBean
을 사용중이라면 다음과 같이 바꿔준다:
import org.springframework.boot.autoconfigure.SpringApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; @SpringBootApplication @EntityScan(basePackageClasses=Customer.class) public class MyApplication { // .... }
또는 스스로 LocalContainerEntityManagerFactoryBean
을 설정중이라면, @EntityScan
어노테이션을 통째로 버리고 LocalContainerEntityManagerFactoryBean.setPackagesToScan(…)
를 호출하거나 또는 EntityManagerFactoryBuilder
packages(…)
메소드를 사용해야한다:
@Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory( EntityManagerFactoryBuilder builder) { return builder .dataSource(...) .properties(...) .packages(Customer.class) .build(); }
테스트 유틸리티와 클래스들 Test utilities and classes
스프링 부트 1.4는 org.springframework.boot.test
패키지를 완전히 재구성된 새로운 spring-boot-test
모듈을 추가하였다. 스프링 부트 1.3 어플리케이션에서 업그레이드할 때, 예전 패키지들의 디프리케이트된 클래스들을 새 구조의 동일한 클래스로 바꿔주어야한다. 리눅스 또는 OSX를 쓰고있다면 다음의 커맨드를 사용해서 코드를 마이그레잇할 수 있다:
find . -type f -name '*.java' -exec sed -i '' \
-e s/org.springframework.boot.test.ConfigFileApplicationContextInitializer/org.springframework.boot.test.context.ConfigFileApplicationContextInitializer/g \
-e s/org.springframework.boot.test.EnvironmentTestUtils/org.springframework.boot.test.util.EnvironmentTestUtils/g \
-e s/org.springframework.boot.test.OutputCapture/org.springframework.boot.test.rule.OutputCapture/g \
-e s/org.springframework.boot.test.SpringApplicationContextLoader/org.springframework.boot.test.context.SpringApplicationContextLoader/g \
-e s/org.springframework.boot.test.SpringBootMockServletContext/org.springframework.boot.test.mock.web.SpringBootMockServletContext/g \
-e s/org.springframework.boot.test.TestRestTemplate/org.springframework.boot.test.web.client.TestRestTemplate/g \
{} \;
추가적으로, 스프링 부트 1.4는 스프링부트 테스트를 돌릴 수 있는 다양한 방법들을 더 합리적이고 간단하게 하려는 시도를 했다. 당신의 다음의 기존 코드를 새로운 @SpringBootTest
어노테이션을 사용하도록 바꿀수 있다:
기존 @SpringApplicationConfiguration(classes=MyConfig.class)
를 대체하는 새로운 @SpringBootTest(classes=MyConfig.class)
기존 @ContextConfiguration(classes=MyConfig.class, loader=SpringApplicationContextLoader.class)
를 대체하는 새로운
@SpringBootTest(classes=MyConfig.class)
기존 @ContextConfiguration(classes=MyConfig.class, loader=SpringApplicationContextLoader.class)
를 대체하는 새로운 @SpringBootTest(classes=MyConfig.class)
기존 @IntegrationTest
를 대체하는 새로운 @SpringBootTest(webEnvironment=WebEnvironment.NONE)
기존 @IntegrationTest
와 @WebAppConfiguration
를 대체하는 새로운 @SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)
(또는 RANDOM_PORT
)
기존 @WebIntegrationTest
to@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)
(or RANDOM_PORT
)
팁 마이그레션 테스트 진행간에 당신은 또한 기존 @RunWith(SpringJUnit4ClassRunner.class)
선언문들을 스프링 4.3의 더 가독성이 좋은 @RunWith(SpringRunner.class)
.로 대체할 수 있다.
@SpringBootTest
어노테이션에 대한 더 자세한 정보는 다음의 링크를 참고하세요 updated documentation.
스프링 부트 1.4는 org.springframework.boot.test
패키지를 완전히 재구성된 새로운 spring-boot-test
모듈을 추가하였다. 스프링 부트 1.3 어플리케이션에서 업그레이드할 때, 예전 패키지들의 디프리케이트된 클래스들을 새 구조의 동일한 클래스로 바꿔주어야한다. 리눅스 또는 OSX를 쓰고있다면 다음의 커맨드를 사용해서 코드를 마이그레잇할 수 있다:
find . -type f -name '*.java' -exec sed -i '' \ -e s/org.springframework.boot.test.ConfigFileApplicationContextInitializer/org.springframework.boot.test.context.ConfigFileApplicationContextInitializer/g \ -e s/org.springframework.boot.test.EnvironmentTestUtils/org.springframework.boot.test.util.EnvironmentTestUtils/g \ -e s/org.springframework.boot.test.OutputCapture/org.springframework.boot.test.rule.OutputCapture/g \ -e s/org.springframework.boot.test.SpringApplicationContextLoader/org.springframework.boot.test.context.SpringApplicationContextLoader/g \ -e s/org.springframework.boot.test.SpringBootMockServletContext/org.springframework.boot.test.mock.web.SpringBootMockServletContext/g \ -e s/org.springframework.boot.test.TestRestTemplate/org.springframework.boot.test.web.client.TestRestTemplate/g \ {} \;
추가적으로, 스프링 부트 1.4는 스프링부트 테스트를 돌릴 수 있는 다양한 방법들을 더 합리적이고 간단하게 하려는 시도를 했다. 당신의 다음의 기존 코드를 새로운 @SpringBootTest
어노테이션을 사용하도록 바꿀수 있다:
기존
@SpringApplicationConfiguration(classes=MyConfig.class)
를 대체하는 새로운@SpringBootTest(classes=MyConfig.class)
기존
@ContextConfiguration(classes=MyConfig.class, loader=SpringApplicationContextLoader.class)
를 대체하는 새로운@SpringBootTest(classes=MyConfig.class)
기존
@ContextConfiguration(classes=MyConfig.class, loader=SpringApplicationContextLoader.class)
를 대체하는 새로운@SpringBootTest(classes=MyConfig.class)
기존
@IntegrationTest
를 대체하는 새로운@SpringBootTest(webEnvironment=WebEnvironment.NONE)
기존
@IntegrationTest
와@WebAppConfiguration
를 대체하는 새로운@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)
(또는RANDOM_PORT
)기존
@WebIntegrationTest
to@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)
(orRANDOM_PORT
)
팁 | 마이그레션 테스트 진행간에 당신은 또한 기존 @RunWith(SpringJUnit4ClassRunner.class) 선언문들을 스프링 4.3의 더 가독성이 좋은 |
@SpringBootTest
어노테이션에 대한 더 자세한 정보는 다음의 링크를 참고하세요 updated documentation.
TestRestTemplate
TestRestTemplate
클래스는 더이상 직접적으로 RestTemplate
에서 extends되지 않는다. (비록 여전히 같은 메소드를 제공하긴하지만). 이로서 TestRestTemplate
는 의도치않게 주입(accidentally injected)되는 일 없이 하나의 빈 Bean으로서 설정하는게 가능해졌다. RestTemplate 안에 실제 접근해야할 필요가 있다면 getRestTemplate()
메소드를 사용하자.
TestRestTemplate
클래스는 더이상 직접적으로 RestTemplate
에서 extends되지 않는다. (비록 여전히 같은 메소드를 제공하긴하지만). 이로서 TestRestTemplate
는 의도치않게 주입(accidentally injected)되는 일 없이 하나의 빈 Bean으로서 설정하는게 가능해졌다. RestTemplate 안에 실제 접근해야할 필요가 있다면 getRestTemplate()
메소드를 사용하자.
Maven spring-boot.version property
메이븐 Spring-boot.version 프로퍼티The spring-boot.version
property has been removed from the spring-boot-dependencies
pom. See issue 5104 for details.
The spring-boot.version
property has been removed from the spring-boot-dependencies
pom. See issue 5104 for details.
Integration Starter
spring-boot-starter-integration
은 일반적인 Spring Integration 어플리케이션에서 필요하지않은 4가지 모듈을 제거함으로서 간소화하였다. 제거된 4개의 모듈은 다음과 같다:
spring-integration-file
spring-integration-http
spring-integration-ip
spring-integration-stream
당신의 어플리케이션이 저 4개의 모듈중 하나라도 사용한다면 pom이나 build.gradle에 명시적 의존성을 추가해줘야할 것이다.
추가적으로, spring-integration-java-dsl
과 spring-integration-jmx
은 이제 스타터에 추가되었다. DSL을 사용하는것은 당신의 어플리케이션의 Spring Intergation을 설정할때 권장되는 되는 방식이다.
spring-boot-starter-integration
은 일반적인 Spring Integration 어플리케이션에서 필요하지않은 4가지 모듈을 제거함으로서 간소화하였다. 제거된 4개의 모듈은 다음과 같다:
spring-integration-file
spring-integration-http
spring-integration-ip
spring-integration-stream
당신의 어플리케이션이 저 4개의 모듈중 하나라도 사용한다면 pom이나 build.gradle에 명시적 의존성을 추가해줘야할 것이다.
추가적으로, spring-integration-java-dsl
과 spring-integration-jmx
은 이제 스타터에 추가되었다. DSL을 사용하는것은 당신의 어플리케이션의 Spring Intergation을 설정할때 권장되는 되는 방식이다.
Spring Batch Starter
spring-boot-starter-batch
starter 는 더이상 embedded 데이터베이스에 의존성을 갖지않는다. 당신이 기존의 방식대로 사용하고 싶다면 당신이 원하는 데이터베이스 (드라이버)를 추가해줘야한다. 예를 들면:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
이미 다른 드라이버를 설정하여 hsqldb
를 exclusion해두었다면 이젠 exclusion을 지워버려도 된다.
spring-boot-starter-batch
starter 는 더이상 embedded 데이터베이스에 의존성을 갖지않는다. 당신이 기존의 방식대로 사용하고 싶다면 당신이 원하는 데이터베이스 (드라이버)를 추가해줘야한다. 예를 들면:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> </dependency> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>runtime</scope> </dependency>
이미 다른 드라이버를 설정하여 hsqldb
를 exclusion해두었다면 이젠 exclusion을 지워버려도 된다.
Downgrading Tomcat
톰켓 8.5.4의 tomcat-juli
모듈이 이제 tomcat-embedded
의 일부로 패키지 되었다. 수동으로 예전 버전의 톰켓으로 다운그레이드했었다면 이제 tomcat-juli
모듈을 추가해주어야할것이다. 자세한 방법은 다음의 문서를 참고하자 how-to documentation section.
톰켓 8.5.4의 tomcat-juli
모듈이 이제 tomcat-embedded
의 일부로 패키지 되었다. 수동으로 예전 버전의 톰켓으로 다운그레이드했었다면 이제 tomcat-juli
모듈을 추가해주어야할것이다. 자세한 방법은 다음의 문서를 참고하자 how-to documentation section.
Dispatch Options Request
spring.mvc.dispatch-options-request
의 기본 프로퍼티가 false
에서 스프링 프레임워크의 선호되는 값인 true
로 바뀌었다.
FrameworkServlet.doService의 OPTIONS
리퀘스트를 사용하지 않으려면 명시적으로 spring.mvc.dispatch-options-request
를 false
.로 바꿔주어야한다.
spring.mvc.dispatch-options-request
의 기본 프로퍼티가 false
에서 스프링 프레임워크의 선호되는 값인 true
로 바뀌었다.
FrameworkServlet.doService의 OPTIONS
리퀘스트를 사용하지 않으려면 명시적으로 spring.mvc.dispatch-options-request
를 false
.로 바꿔주어야한다.
Forced character encoding
캐릭터 인코딩 강제하기(forced) 이제 요청request에만 적용된다. (응답response는 아님). 요청request과 응답response 둘다 강제하려면 spring.http.encoding.force
를 true
로 설정해주어야한다.
캐릭터 인코딩 강제하기(forced) 이제 요청request에만 적용된다. (응답response는 아님). 요청request과 응답response 둘다 강제하려면 spring.http.encoding.force
를 true
로 설정해주어야한다.
Multipart support
multipart 프로퍼티는 multipart
에서 spring.http.multipart
로 바뀌었다.
multipart 프로퍼티는 multipart
에서 spring.http.multipart
로 바뀌었다.
Server header
Server
HTTP 응답헤더 response header 는 이제 server.server-header
프로퍼티를 설정해야지만 설정이 가능하다.
Server
HTTP 응답헤더 response header 는 이제 server.server-header
프로퍼티를 설정해야지만 설정이 가능하다.
@ConfigurationProperties default bean names
When a @ConfigurationProperties
bean is registered via@EnableConfigurationProperties(SomeBean.class)
, we used to generate a bean name of the form <prefix>.CONFIGURATION_PROPERTIES
. As of Spring Boot 1.4, we have changed that pattern to avoid name clashes if two beans use the same prefix.
The new conventional name is <prefix>-<fqn>
, where <prefix>
is the environment key prefix specified in the @ConfigurationProperties
annotation and <fqn> the fully qualified name of the bean. If the annotation does not provide any prefix, only the fully qualified name of the bean is used.
When a @ConfigurationProperties
bean is registered via@EnableConfigurationProperties(SomeBean.class)
, we used to generate a bean name of the form <prefix>.CONFIGURATION_PROPERTIES
. As of Spring Boot 1.4, we have changed that pattern to avoid name clashes if two beans use the same prefix.
The new conventional name is <prefix>-<fqn>
, where <prefix>
is the environment key prefix specified in the @ConfigurationProperties
annotation and <fqn> the fully qualified name of the bean. If the annotation does not provide any prefix, only the fully qualified name of the bean is used.
Jetty JNDI support
spring-boot-starter-jetty
"스타터Starter"는 더이상 org.eclipse.jetty:jetty-jndi를 포함하지않는다.
JNDI를 제티와 같이 사용중이라면 이제 스스로 이 의존성을 직접 추가해줘야만 한다.
spring-boot-starter-jetty
"스타터Starter"는 더이상 org.eclipse.jetty:jetty-jndi를 포함하지않는다.
JNDI를 제티와 같이 사용중이라면 이제 스스로 이 의존성을 직접 추가해줘야만 한다.
Guava caches
구아바 캐시Guava cache 지원을 사용중인 개발자는 Caffeine으로 이주할것을 권장한다.
구아바 캐시Guava cache 지원을 사용중인 개발자는 Caffeine으로 이주할것을 권장한다.
Remote Shell
The CRaSH
properties have moved from the shell.
namespace to the management.shell.
namespace. Also, the authentication type should now be defined viamanagement.shell.auth.type
.
The CRaSH
properties have moved from the shell.
namespace to the management.shell.
namespace. Also, the authentication type should now be defined viamanagement.shell.auth.type
.
Spring Session auto-configuration improvements
Spring Boot supports more backend stores for Spring Session: alongside Redis, JDBC, MongoDB, Hazelcast and in memory concurrent hash maps are also supported. A newspring.session.store-type
mandatory property has been introduced to select the store Spring Session should be using.
Spring Boot supports more backend stores for Spring Session: alongside Redis, JDBC, MongoDB, Hazelcast and in memory concurrent hash maps are also supported. A newspring.session.store-type
mandatory property has been introduced to select the store Spring Session should be using.
Launch script identity
When the launch script is determining the application’s default identity, the canonical name of the directory containing the jar will now be used. Previously, if the directory containing the jar was a symlink, the name of the symlink was used. If you require more control over the application’s identity, the APP_NAME
environment variable should be used.
When the launch script is determining the application’s default identity, the canonical name of the directory containing the jar will now be used. Previously, if the directory containing the jar was a symlink, the name of the symlink was used. If you require more control over the application’s identity, the APP_NAME
environment variable should be used.
MongoDB 3
The default version of Mongo’s Java Driver is now 3.2.2 (from 2.14.2) and spring-boot-starter-data-mongodb
has been updated to use the new, preferred mongodb-driver
artifact.
The auto-configuration for Embedded MongoDB has also been updated to use 3.2.2 as its default version.
The default version of Mongo’s Java Driver is now 3.2.2 (from 2.14.2) and spring-boot-starter-data-mongodb
has been updated to use the new, preferred mongodb-driver
artifact.
The auto-configuration for Embedded MongoDB has also been updated to use 3.2.2 as its default version.
Thymeleaf 3
기본값으로 스프링 부트는 타임리프 2.1을 사용하지만 이제 타임리프3와도 호환된다. 자세한 내용은 업데이트된 문서 를 찾아보자.
기본값으로 스프링 부트는 타임리프 2.1을 사용하지만 이제 타임리프3와도 호환된다. 자세한 내용은 업데이트된 문서 를 찾아보자.
Executable jar layout
실행가능한 jars (executable jars)의 레이아웃이 변경되었다. 스프링부트의 메이븐, 그래들 또는 앤트지원을 통해 빌드한다면 이 변화는 영향을 미치지 않을 것이다. 당신 스스로의 실행가능한 아카이브를 통해서 빌드한다면 이제 어플리케이션이 lib
이 아니라 BOOT-INF/lib
에 패키지 된다는 것을 명심하라. 어플리케이션의 클래스들은 이제 jar의 루트가 아닌 BOOT-INF/classes
에 패키지 될것이다.
실행가능한 jars (executable jars)의 레이아웃이 변경되었다. 스프링부트의 메이븐, 그래들 또는 앤트지원을 통해 빌드한다면 이 변화는 영향을 미치지 않을 것이다. 당신 스스로의 실행가능한 아카이브를 통해서 빌드한다면 이제 어플리케이션이 lib
이 아니라 BOOT-INF/lib
에 패키지 된다는 것을 명심하라. 어플리케이션의 클래스들은 이제 jar의 루트가 아닌 BOOT-INF/classes
에 패키지 될것이다.
maven-failsafe-plugin
Integration tests with the As of Failsafe 2.19
, target/classes
is no longer on the classpath and the project’s built jar is used instead. The plugin won’t be able to find your classes due to the change in the executable jar layout. There are two ways to work around this issue:
Downgrade to 2.18.1
so that you use target/classes
instead
Configure the spring-boot-maven-plugin
to use a classifier for the repackage
goal. That way, the original jar will be available and used by the plugin. For example
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
Note If you are using Spring Boot’s dependency management, there is nothing to do as you’ll use 2.18.1
by default.
Tip Watch SUREFIRE-1198 for updates on this issue.
As of Failsafe 2.19
, target/classes
is no longer on the classpath and the project’s built jar is used instead. The plugin won’t be able to find your classes due to the change in the executable jar layout. There are two ways to work around this issue:
Downgrade to
2.18.1
so that you usetarget/classes
insteadConfigure the
spring-boot-maven-plugin
to use a classifier for therepackage
goal. That way, the original jar will be available and used by the plugin. For example
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
Note | If you are using Spring Boot’s dependency management, there is nothing to do as you’ll use 2.18.1 by default. |
Tip | Watch SUREFIRE-1198 for updates on this issue. |
HornetQ
HornetQ 지원은 디프리케이트 되었다. HornetQ 사용자들은 Artemis로 이주할것을 권장한다.
HornetQ 지원은 디프리케이트 되었다. HornetQ 사용자들은 Artemis로 이주할것을 권장한다.
New and Noteworthy
Tip Check the configuration changelog for a complete overview of the changes in configuration.
Tip | Check the configuration changelog for a complete overview of the changes in configuration. |
Spring Framework 4.3
Spring Boot 1.4 builds on and requires Spring Framework 4.3. There are a number of nice refinements in Spring Framework 4.3 including new Spring MVC @RequestMapping
annotations. Refer to the Spring Framework reference documentation for details.
Note that the test framework in Spring Framework 4.3 requires JUnit 4.12. See SPR-13275for further details.
Spring Boot 1.4 builds on and requires Spring Framework 4.3. There are a number of nice refinements in Spring Framework 4.3 including new Spring MVC @RequestMapping
annotations. Refer to the Spring Framework reference documentation for details.
Note that the test framework in Spring Framework 4.3 requires JUnit 4.12. See SPR-13275for further details.
Third-party library upgrades
A number of third party libraries have been upgraded to their latest version. Updates include Jetty 9.3, Tomcat 8.5, Jersey 2.23, Hibernate 5.0, Jackson 2.7, Solr 5.5, Spring Data Hopper, Spring Session 1.2, Hazelcast 3.6, Artemis 1.3, Ehcache 3.1, Elasticsearch 2.3, Spring REST Docs 1.1, Spring AMQP 1.6 & Spring Integration 4.3.
Several Maven plugins were also upgraded.
A number of third party libraries have been upgraded to their latest version. Updates include Jetty 9.3, Tomcat 8.5, Jersey 2.23, Hibernate 5.0, Jackson 2.7, Solr 5.5, Spring Data Hopper, Spring Session 1.2, Hazelcast 3.6, Artemis 1.3, Ehcache 3.1, Elasticsearch 2.3, Spring REST Docs 1.1, Spring AMQP 1.6 & Spring Integration 4.3.
Several Maven plugins were also upgraded.
Couchbase support
Full auto-configuration support is now provided for Couchbase. You can easily access aBucket
and Cluster
bean by adding the spring-boot-starter-data-couchbase
"Starter" and providing a little configuration:
spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123
spring.couchbase.bucket.name=my-bucket
spring.couchbase.bucket.password=secret
It’s also possible to use Couchbase as a backing store for a Spring Data Repository
or as aCacheManager
. Refer to the updated documentation for details.
Full auto-configuration support is now provided for Couchbase. You can easily access aBucket
and Cluster
bean by adding the spring-boot-starter-data-couchbase
"Starter" and providing a little configuration:
spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123 spring.couchbase.bucket.name=my-bucket spring.couchbase.bucket.password=secret
It’s also possible to use Couchbase as a backing store for a Spring Data Repository
or as aCacheManager
. Refer to the updated documentation for details.
Neo4J Support
Auto-configuration support is now provided for Neo4J. You can connect to a remote server or run an embedded Neo4J server. You can also use Neo4J to back a Spring DataRepository
, for example:
public interface CityRepository extends GraphRepository<City> {
Page<City> findAll(Pageable pageable);
City findByNameAndCountry(String name, String country);
}
Full details are provided in the Neo4J section of the reference documentation.
Auto-configuration support is now provided for Neo4J. You can connect to a remote server or run an embedded Neo4J server. You can also use Neo4J to back a Spring DataRepository
, for example:
public interface CityRepository extends GraphRepository<City> {
Page<City> findAll(Pageable pageable);
City findByNameAndCountry(String name, String country);
}
Full details are provided in the Neo4J section of the reference documentation.
Redis Spring Data repositories
Redis can now be used to back Spring Data repositories. See the Spring Data Redisdocumentation for more details.
Redis can now be used to back Spring Data repositories. See the Spring Data Redisdocumentation for more details.
Narayana transaction manager support
Auto-configuration support is now included for the Narayana transaction manager. You can choose between Narayana, Bitronix or Atomkos if you need JTA support. See the updated reference guide for details.
Auto-configuration support is now included for the Narayana transaction manager. You can choose between Narayana, Bitronix or Atomkos if you need JTA support. See the updated reference guide for details.
Caffeine cache support
Auto-configuration is provided for Caffeine v2.2 (a Java 8 rewrite of Guava’s caching support). Existing Guava cache users should consider migrating to Caffeine as Guava cache support will be dropped in a future release.
Auto-configuration is provided for Caffeine v2.2 (a Java 8 rewrite of Guava’s caching support). Existing Guava cache users should consider migrating to Caffeine as Guava cache support will be dropped in a future release.
Elasticsearch Jest support
Spring Boot auto-configures a JestClient
and a dedicated HealthIndicator
if Jest is on the classpath. This allows you to use Elasticsearch
even when spring-data-elasticsearch
isn’t on the classpath.
Spring Boot auto-configures a JestClient
and a dedicated HealthIndicator
if Jest is on the classpath. This allows you to use Elasticsearch
even when spring-data-elasticsearch
isn’t on the classpath.
Analysis of startup failures
Spring Boot will now perform analysis of common startup failures and provide useful diagnostic information rather than simply logging an exception and its stack trace. For example, a startup failure due to the embedded servlet container’s port being in use looked like this in earlier versions of Spring Boot:
2016-02-16 17:46:14.334 ERROR 24753 --- [ main] o.s.boot.SpringApplication : Application startup failed
java.lang.RuntimeException: java.net.BindException: Address already in use
at io.undertow.Undertow.start(Undertow.java:181) ~[undertow-core-1.3.14.Final.jar:1.3.14.Final]
at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainer.start(UndertowEmbeddedServletContainer.java:121) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:293) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at sample.undertow.SampleUndertowApplication.main(SampleUndertowApplication.java:26) [classes/:na]
Caused by: java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_60]
at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_60]
at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_60]
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_60]
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_60]
at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:190) ~[xnio-nio-3.3.4.Final.jar:3.3.4.Final]
at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:243) ~[xnio-api-3.3.4.Final.jar:3.3.4.Final]
at io.undertow.Undertow.start(Undertow.java:137) ~[undertow-core-1.3.14.Final.jar:1.3.14.Final]
... 11 common frames omitted
In 1.4, it will look like this:
2016-02-16 17:44:49.179 ERROR 24745 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Embedded servlet container failed to start. Port 8080 was already in use.
Action:
Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.
If you still want to see the stacktrace of the underlying cause, enable debug logging fororg.springframework.boot.diagnostics.LoggingFailureAnalysisReporter
.
Spring Boot will now perform analysis of common startup failures and provide useful diagnostic information rather than simply logging an exception and its stack trace. For example, a startup failure due to the embedded servlet container’s port being in use looked like this in earlier versions of Spring Boot:
2016-02-16 17:46:14.334 ERROR 24753 --- [ main] o.s.boot.SpringApplication : Application startup failed java.lang.RuntimeException: java.net.BindException: Address already in use at io.undertow.Undertow.start(Undertow.java:181) ~[undertow-core-1.3.14.Final.jar:1.3.14.Final] at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainer.start(UndertowEmbeddedServletContainer.java:121) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:293) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at sample.undertow.SampleUndertowApplication.main(SampleUndertowApplication.java:26) [classes/:na] Caused by: java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_60] at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_60] at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_60] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_60] at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_60] at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:190) ~[xnio-nio-3.3.4.Final.jar:3.3.4.Final] at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:243) ~[xnio-api-3.3.4.Final.jar:3.3.4.Final] at io.undertow.Undertow.start(Undertow.java:137) ~[undertow-core-1.3.14.Final.jar:1.3.14.Final] ... 11 common frames omitted
In 1.4, it will look like this:
2016-02-16 17:44:49.179 ERROR 24745 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Embedded servlet container failed to start. Port 8080 was already in use. Action: Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.
If you still want to see the stacktrace of the underlying cause, enable debug logging fororg.springframework.boot.diagnostics.LoggingFailureAnalysisReporter
.
Image Banners
You can now use image files to render ASCII art banners. Drop a banner.gif
, banner.jpg
orbanner.png
file into src/main/resources
to have it automatically converted to ASCII. You can use the banner.image.width
and banner.image.height
properties to tweak the size, or usebanner.image.invert
to invert the colors.
You can now use image files to render ASCII art banners. Drop a banner.gif
, banner.jpg
orbanner.png
file into src/main/resources
to have it automatically converted to ASCII. You can use the banner.image.width
and banner.image.height
properties to tweak the size, or usebanner.image.invert
to invert the colors.
RestTemplate builder
A new RestTemplateBuilder
can be used to easily create a RestTemplate
with sensible defaults. By default, the built RestTemplate
will attempt to use the most suitableClientHttpRequestFactory
available on the classpath and will be aware of theMessageConverter
instances to use (including Jackson). The builder includes a number of useful methods that can be used to quickly configure a RestTemplate
. For example, to add BASIC auth support you can use:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.basicAuthorization("user", "secret").build();
}
The auto-configured TestRestTemplate
now uses the RestTemplateBuilder
as well.
A new RestTemplateBuilder
can be used to easily create a RestTemplate
with sensible defaults. By default, the built RestTemplate
will attempt to use the most suitableClientHttpRequestFactory
available on the classpath and will be aware of theMessageConverter
instances to use (including Jackson). The builder includes a number of useful methods that can be used to quickly configure a RestTemplate
. For example, to add BASIC auth support you can use:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.basicAuthorization("user", "secret").build();
}
The auto-configured TestRestTemplate
now uses the RestTemplateBuilder
as well.
JSON Components
A new @JsonComponent
annotation is now provided for custom Jackson JsonSerializer
and/orJsonDeserializer
registration. This can be a useful way to decouple JSON serialization logic:
@JsonComponent
public class Example {
public static class Serializer extends JsonSerializer<SomeObject> {
// ...
}
public static class Deserializer extends JsonDeserializer<SomeObject> {
// ...
}
}
Additionally, Spring Boot also now provides JsonObjectSerializer
and JsonObjectDeserializer
base classes which provide useful alternatives to the standard Jackson versions when serializing objects. See the updated documentation for details.
A new @JsonComponent
annotation is now provided for custom Jackson JsonSerializer
and/orJsonDeserializer
registration. This can be a useful way to decouple JSON serialization logic:
@JsonComponent
public class Example {
public static class Serializer extends JsonSerializer<SomeObject> {
// ...
}
public static class Deserializer extends JsonDeserializer<SomeObject> {
// ...
}
}
Additionally, Spring Boot also now provides JsonObjectSerializer
and JsonObjectDeserializer
base classes which provide useful alternatives to the standard Jackson versions when serializing objects. See the updated documentation for details.
Convention based error pages
Custom error pages for a given status code can now be created by following a convention based approach. Create a static HTML file in /public/error
or add a template to/templates/error
using the status code as the filename. For example, to register a custom 404 file you could add src/main/resource/public/error/404.html
. See the updated reference documentation for details.
Custom error pages for a given status code can now be created by following a convention based approach. Create a static HTML file in /public/error
or add a template to/templates/error
using the status code as the filename. For example, to register a custom 404 file you could add src/main/resource/public/error/404.html
. See the updated reference documentation for details.
@EntityScan
annotation
Unified org.springframework.boot.autoconfigure.domain.EntityScan
can now be used to specify the packages to use for JPA, Neo4J, MongoDB, Cassandra and Couchbase. As a result, the JPA-specific org.springframework.boot.orm.jpa.EntityScan
is now deprecated.
org.springframework.boot.autoconfigure.domain.EntityScan
can now be used to specify the packages to use for JPA, Neo4J, MongoDB, Cassandra and Couchbase. As a result, the JPA-specific org.springframework.boot.orm.jpa.EntityScan
is now deprecated.
ErrorPageRegistry
New ErrorPageRegistry
and ErrorPageRegistrar
interfaces allow error pages to be registered in a consistent way regardless of the use of an embedded servlet container. TheErrorPageFilter
class has been updated to that it is now a ErrorPageRegistry
and not a fakeConfigurableEmbeddedServletContainer
.
New ErrorPageRegistry
and ErrorPageRegistrar
interfaces allow error pages to be registered in a consistent way regardless of the use of an embedded servlet container. TheErrorPageFilter
class has been updated to that it is now a ErrorPageRegistry
and not a fakeConfigurableEmbeddedServletContainer
.
PrincipalExtractor
The PrincipalExtractor
interface can now be used if you need to extract the OAuth2Principal
using custom logic.
The PrincipalExtractor
interface can now be used if you need to extract the OAuth2Principal
using custom logic.
Test improvements
Spring Boot 1.4 includes a major overhaul of testing support. Test classes and utilities are now provided in dedicated spring-boot-test
and spring-boot-test-autoconfigure
jars (although most users will continue to pick them up via the spring-boot-starter-test
"Starter"). We’ve added AssertJ, JSONassert and JsonPath dependencies to the test starter.
Spring Boot 1.4 includes a major overhaul of testing support. Test classes and utilities are now provided in dedicated spring-boot-test
and spring-boot-test-autoconfigure
jars (although most users will continue to pick them up via the spring-boot-starter-test
"Starter"). We’ve added AssertJ, JSONassert and JsonPath dependencies to the test starter.
@SpringBootTest
With Spring Boot 1.3 there were multiple ways of writing a Spring Boot test. You could use@SpringApplicationConfiguration
, @ContextConfiguration
with theSpringApplicationContextLoader
, @IntegrationTest
or @WebIntegrationTest
. With Spring Boot 1.4, a single @SpringBootTest
annotation replaces all of those.
Use @SpringBootTest
in combination with @RunWith(SpringRunner.class)
and set thewebEnvironment
attribute depending on the type of test you want to write.
A classic integration test, with a mocked servlet environment:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
// ...
}
A web integration test, running a live server listening on a defined port:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvionment.DEFINED_PORT)
public class MyTest {
// ...
}
A web integration test, running a live server listening on a random port:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvionment.RANDOM_PORT)
public class MyTest {
@LocalServerPort
private int actualPort;
// ...
}
See the updated reference documentation for details.
With Spring Boot 1.3 there were multiple ways of writing a Spring Boot test. You could use@SpringApplicationConfiguration
, @ContextConfiguration
with theSpringApplicationContextLoader
, @IntegrationTest
or @WebIntegrationTest
. With Spring Boot 1.4, a single @SpringBootTest
annotation replaces all of those.
Use @SpringBootTest
in combination with @RunWith(SpringRunner.class)
and set thewebEnvironment
attribute depending on the type of test you want to write.
A classic integration test, with a mocked servlet environment:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
// ...
}
A web integration test, running a live server listening on a defined port:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvionment.DEFINED_PORT)
public class MyTest {
// ...
}
A web integration test, running a live server listening on a random port:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvionment.RANDOM_PORT)
public class MyTest {
@LocalServerPort
private int actualPort;
// ...
}
See the updated reference documentation for details.
Auto-detection of test configuration
Test configuration can now be automatically detected for most tests. If you follow the Spring Boot recommended conventions for structuring your code the @SpringBootApplication
class will be loaded when no explicit configuration is defined. If you need to load a different@Configuration
class you can either include it as a nested inner-class in your test, or use theclasses
attribute of @SpringBootTest
.
See Detecting test configuration for details.
Test configuration can now be automatically detected for most tests. If you follow the Spring Boot recommended conventions for structuring your code the @SpringBootApplication
class will be loaded when no explicit configuration is defined. If you need to load a different@Configuration
class you can either include it as a nested inner-class in your test, or use theclasses
attribute of @SpringBootTest
.
See Detecting test configuration for details.
Mocking and spying beans
It’s quite common to want to replace a single bean in your ApplicationContext
with a mock for testing purposes. With Spring Boot 1.4 this now as easy as annotating a field in your test with @MockBean
:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
@MockBean
private RemoteService remoteService;
@Autowired
private Reverser reverser;
@Test
public void exampleTest() {
// RemoteService has been injected into the reverser bean
given(this.remoteService.someCall()).willReturn("mock");
String reverse = reverser.reverseSomeCall();
assertThat(reverse).isEqualTo("kcom");
}
}
You can also use @SpyBean
if you want to spy on an existing bean rather than using a full mock.
See the mocking section of the reference documentation for more details.
It’s quite common to want to replace a single bean in your ApplicationContext
with a mock for testing purposes. With Spring Boot 1.4 this now as easy as annotating a field in your test with @MockBean
:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
@MockBean
private RemoteService remoteService;
@Autowired
private Reverser reverser;
@Test
public void exampleTest() {
// RemoteService has been injected into the reverser bean
given(this.remoteService.someCall()).willReturn("mock");
String reverse = reverser.reverseSomeCall();
assertThat(reverse).isEqualTo("kcom");
}
}
You can also use @SpyBean
if you want to spy on an existing bean rather than using a full mock.
See the mocking section of the reference documentation for more details.
Auto-configured tests
Full application auto-configuration is sometime overkill for tests, you often only want to auto-configure a specific "slice" of your application. Spring Boot 1.4 introduces a number of specialized test annotations that can be used for testing specific parts of your application:
@JsonTest
- For testing JSON marshalling and unmarshalling.
@WebMvcTest
- For testing Spring MVC @Controllers
using MockMVC.
@RestClientTest
- For testing RestTemplate calls.
@DataJpaTest
- For testing Spring Data JPA elements
Many of the annotations provide additional auto-configuration that’s specific to testing. For example, if you use @WebMvcTest
you can @Autowire
a fully configured MockMvc
instance.
See the reference documentation for details.
Full application auto-configuration is sometime overkill for tests, you often only want to auto-configure a specific "slice" of your application. Spring Boot 1.4 introduces a number of specialized test annotations that can be used for testing specific parts of your application:
@JsonTest
- For testing JSON marshalling and unmarshalling.@WebMvcTest
- For testing Spring MVC@Controllers
using MockMVC.@RestClientTest
- For testing RestTemplate calls.@DataJpaTest
- For testing Spring Data JPA elements
Many of the annotations provide additional auto-configuration that’s specific to testing. For example, if you use @WebMvcTest
you can @Autowire
a fully configured MockMvc
instance.
See the reference documentation for details.
JSON AssertJ assertions
New JacksonTester
, GsonTester
and BasicJsonTester
classes can be used in combination with AssertJ to test JSON marshalling and unmarshalling. Testers can be used with the@JsonTest
annotation or directly on a test class:
@RunWith(SpringRunner.class)
@JsonTest
public class MyJsonTests {
private JacksonTester<VehicleDetails> json;
@Test
public void testSerialize() throws Exception {
VehicleDetails details = new VehicleDetails("Honda", "Civic");
assertThat(this.json.write(details)).isEqualToJson("expected.json");
assertThat(this.json.write(details)).hasJsonPathStringValue("@.make");
}
}
See the JSON section of the reference documentation or the Javadocs for details.
New JacksonTester
, GsonTester
and BasicJsonTester
classes can be used in combination with AssertJ to test JSON marshalling and unmarshalling. Testers can be used with the@JsonTest
annotation or directly on a test class:
@RunWith(SpringRunner.class)
@JsonTest
public class MyJsonTests {
private JacksonTester<VehicleDetails> json;
@Test
public void testSerialize() throws Exception {
VehicleDetails details = new VehicleDetails("Honda", "Civic");
assertThat(this.json.write(details)).isEqualToJson("expected.json");
assertThat(this.json.write(details)).hasJsonPathStringValue("@.make");
}
}
See the JSON section of the reference documentation or the Javadocs for details.
@RestClientTest
The @RestClientTest
annotation can be used if you want to test REST clients. By default it will auto-configure Jackson and GSON support, configure a RestTemplateBuilder
and add support for MockRestServiceServer
.
The @RestClientTest
annotation can be used if you want to test REST clients. By default it will auto-configure Jackson and GSON support, configure a RestTemplateBuilder
and add support for MockRestServiceServer
.
Auto-configuration for Spring REST Docs
Combined with the support for auto-configuring MockMvc
described above, auto-configuration for Spring REST Docs has been introduced. REST Docs can be enabled using the new @AutoConfigureRestDocs
annotation. This will result in the MockMvc
instance being automatically configured to use REST Docs and also removes the need to use REST Docs' JUnit rule. Please see the relevant section of the reference documentation for further details.
Combined with the support for auto-configuring MockMvc
described above, auto-configuration for Spring REST Docs has been introduced. REST Docs can be enabled using the new @AutoConfigureRestDocs
annotation. This will result in the MockMvc
instance being automatically configured to use REST Docs and also removes the need to use REST Docs' JUnit rule. Please see the relevant section of the reference documentation for further details.
Test utilities
spring-boot-starter-test
now brings the AssertJ
assertions library.
Test utilities from the org.springframework.boot.test
package have been moved to a spring-boot-test
dedicated artifact.
spring-boot-starter-test
now brings the AssertJ
assertions library.
Test utilities from the org.springframework.boot.test
package have been moved to a spring-boot-test
dedicated artifact.
Actuator info endpoint improvements
You can now use the InfoContributor
interface to register beans that expose information to the /info
actuator endpoint. Out of the box support is provided for:
Full or partial Git information generated from the git-commit-id-plugin
Maven or gradle-git-properties
Gradle plugin (set management.info.git.mode=full
to expose full details)
Build information generated from the Spring Boot Maven or Gradle plugin.
Custom information from the Environment (any property starting info.*
)
Details are documented in the "Application information" section of the reference docs.
You can now use the InfoContributor
interface to register beans that expose information to the /info
actuator endpoint. Out of the box support is provided for:
Full or partial Git information generated from the
git-commit-id-plugin
Maven orgradle-git-properties
Gradle plugin (setmanagement.info.git.mode=full
to expose full details)Build information generated from the Spring Boot Maven or Gradle plugin.
Custom information from the Environment (any property starting
info.*
)
Details are documented in the "Application information" section of the reference docs.
MetricsFilter improvements
The MetricsFilter
can now submit metrics in both the classic "merged" form, or grouped per HTTP method. Use endpoints.metrics.filter
properties to change the configuration:
endpoints.metrics.filter.gauge-submissions=grouped
endpoints.metrics.filter.counter-submissions=grouped,merged
The MetricsFilter
can now submit metrics in both the classic "merged" form, or grouped per HTTP method. Use endpoints.metrics.filter
properties to change the configuration:
endpoints.metrics.filter.gauge-submissions=grouped endpoints.metrics.filter.counter-submissions=grouped,merged
Spring Session JDBC Initializer
If Spring Session is configured to use the JDBC store, the schema is now created automatically on startup.
If Spring Session is configured to use the JDBC store, the schema is now created automatically on startup.
Secured connection for Artemis/HornetQ
Spring Boot now allows to connect against a secured Artemis/HornetQ broker.
Spring Boot now allows to connect against a secured Artemis/HornetQ broker.
Miscellaneous
server.jetty.acceptors
and server.jetty.selectors
properties have been added to configure the number of Jetty acceptors and selectors.
server.max-http-header-size
and server.max-http-post-size
can be used to constrain maximum sizes for HTTP headers and HTTP POSTs. Settings work on Tomcat, Jetty and Undertow.
The minimum number of spare threads for Tomcat can now be configured usingserver.tomcat.min-spare-threads
Profile negation in now supported in application.yml
files. Use the familiar !
prefix inspring.profiles
values
The actuator exposes a new headdump
endpoint that returns a GZip compressed hprof
heap dump file
Spring Mobile is now auto-configured for all supported template engines
The Spring Boot maven plugin allows to bundle system
scoped artifacts using the newincludeSystemScope
attribute
spring.mvc.log-resolved-exception
enables the automatic logging of a warning when an exception is resolved by a HandlerExceptionResolver
spring.data.cassandra.schema-action
you be used to customize the schema action to take on startup
Spring Boot’s fat jar format should now consume much less memory
Locale to Charset mapping is now supported via the spring.http.encoding.mapping.<locale>=<charset>
property
server.jetty.acceptors
andserver.jetty.selectors
properties have been added to configure the number of Jetty acceptors and selectors.server.max-http-header-size
andserver.max-http-post-size
can be used to constrain maximum sizes for HTTP headers and HTTP POSTs. Settings work on Tomcat, Jetty and Undertow.The minimum number of spare threads for Tomcat can now be configured using
server.tomcat.min-spare-threads
Profile negation in now supported in
application.yml
files. Use the familiar!
prefix inspring.profiles
valuesThe actuator exposes a new
headdump
endpoint that returns a GZip compressedhprof
heap dump fileSpring Mobile is now auto-configured for all supported template engines
The Spring Boot maven plugin allows to bundle
system
scoped artifacts using the newincludeSystemScope
attributespring.mvc.log-resolved-exception
enables the automatic logging of a warning when an exception is resolved by aHandlerExceptionResolver
spring.data.cassandra.schema-action
you be used to customize the schema action to take on startupSpring Boot’s fat jar format should now consume much less memory
Locale to Charset mapping is now supported via the
spring.http.encoding.mapping.<locale>=<charset>
property
Spring Data "Ingalls" release train support
Spring Boot 1.4 GA ships with the Spring Data "Hopper" release out of the box. Users that would like to try the "Ingalls" release train (available in milestone one at the time of writing) can do so by just setting the spring-data-releasetrain.version
property to Ingalls-M1
and declaring the Spring milestone repository.
Depending on what modules of Spring Data you use, you might have to upgrade a couple of transitive dependencies, too:
Spring Data REST users will have to upgrade to Spring HATEOAS 0.21 (set spring-hateoas.version
to 0.21.0.RELEASE
)
Spring Data Redis users using Jedis as driver will have to upgrade to 2.9 (setjedis.version
to 2.9.0
)
Spring Boot 1.4 GA ships with the Spring Data "Hopper" release out of the box. Users that would like to try the "Ingalls" release train (available in milestone one at the time of writing) can do so by just setting the spring-data-releasetrain.version
property to Ingalls-M1
and declaring the Spring milestone repository.
Depending on what modules of Spring Data you use, you might have to upgrade a couple of transitive dependencies, too:
Spring Data REST users will have to upgrade to Spring HATEOAS 0.21 (set
spring-hateoas.version
to0.21.0.RELEASE
)Spring Data Redis users using Jedis as driver will have to upgrade to 2.9 (set
jedis.version
to2.9.0
)
Deprecations in Spring Boot 1.4
Velocity support has been deprecated since support has been deprecated as of Spring Framework 4.3.
Some constructors in UndertowEmbeddedServletContainer
have been deprecated (most uses should be unaffected).
The locations
and merge
attributes of the @ConfigurationProperties
annotation have been deprecated in favor of directly configuring the Environment
.
The protected SpringApplication.printBanner
method should no longer be used to print a custom banner. Use the Banner
interface instead.
The protected InfoEndpoint.getAdditionalInfo
method has been deprecated in favor of the InfoContributor
interface.
org.springframework.boot.autoconfigure.test.ImportAutoConfiguration
has been moved toorg.springframework.boot.autoconfigure
.
All classes in the org.springframework.boot.test
package have been deprecated. See the "upgrading" notes above for details.
PropertiesConfigurationFactory.setProperties(Properties)
is deprecated in favor of usingPropertySources
.
Several classes in the org.springframework.boot.context.embedded
package have been deprecated and relocated to org.springframework.boot.web.servlet
.
All classes in the org.springframework.boot.context.web
package have been deprecated and relocated.
The spring-boot-starter-ws
"Starter" has been renamed to spring-boot-starter-web-services
.
The spring-boot-starter-redis
"Starter" has been renamed to spring-boot-starter-data-redis
.
The spring-boot-starter-hornetq
starter and auto-configuration has been deprecated in favour of using spring-boot-starter-artemis
management.security.role
has been deprecated in favour of management.security.roles
The @org.springframework.boot.orm.jpa.EntityScan
annotation has been deprecated in favor of @org.springframework.boot.autoconfigure.domain.EntityScan
or explicit configuration.
TomcatEmbeddedServletContainerFactory.getValves()
has been deprecated in favor ofgetContextValves()
.
org.springframework.boot.actuate.system.EmbeddedServerPortFileWriter
has been deprecated in favor of org.springframework.boot.system.EmbeddedServerPortFileWriter
org.springframework.boot.actuate.system.ApplicationPidFileWriter
has been deprecated in favor of org.springframework.boot.system.ApplicationPidFileWriter
Velocity support has been deprecated since support has been deprecated as of Spring Framework 4.3.
Some constructors in
UndertowEmbeddedServletContainer
have been deprecated (most uses should be unaffected).The
locations
andmerge
attributes of the@ConfigurationProperties
annotation have been deprecated in favor of directly configuring theEnvironment
.The protected
SpringApplication.printBanner
method should no longer be used to print a custom banner. Use theBanner
interface instead.The protected
InfoEndpoint.getAdditionalInfo
method has been deprecated in favor of theInfoContributor
interface.org.springframework.boot.autoconfigure.test.ImportAutoConfiguration
has been moved toorg.springframework.boot.autoconfigure
.All classes in the
org.springframework.boot.test
package have been deprecated. See the "upgrading" notes above for details.PropertiesConfigurationFactory.setProperties(Properties)
is deprecated in favor of usingPropertySources
.Several classes in the
org.springframework.boot.context.embedded
package have been deprecated and relocated toorg.springframework.boot.web.servlet
.All classes in the
org.springframework.boot.context.web
package have been deprecated and relocated.The
spring-boot-starter-ws
"Starter" has been renamed tospring-boot-starter-web-services
.The
spring-boot-starter-redis
"Starter" has been renamed tospring-boot-starter-data-redis
.The
spring-boot-starter-hornetq
starter and auto-configuration has been deprecated in favour of usingspring-boot-starter-artemis
management.security.role
has been deprecated in favour ofmanagement.security.roles
The
@org.springframework.boot.orm.jpa.EntityScan
annotation has been deprecated in favor of@org.springframework.boot.autoconfigure.domain.EntityScan
or explicit configuration.TomcatEmbeddedServletContainerFactory.getValves()
has been deprecated in favor ofgetContextValves()
.org.springframework.boot.actuate.system.EmbeddedServerPortFileWriter
has been deprecated in favor oforg.springframework.boot.system.EmbeddedServerPortFileWriter
org.springframework.boot.actuate.system.ApplicationPidFileWriter
has been deprecated in favor oforg.springframework.boot.system.ApplicationPidFileWriter
Property Renames
spring.jackson.serialization-inclusion
should be replaced with spring.jackson.default-property-inclusion
.
spring.activemq.pooled
should be replaced with spring.activemq.pool.enabled
.
spring.jpa.hibernate.naming-strategy
should be replaced withspring.jpa.hibernate.naming.strategy
.
server.tomcat.max-http-header-size
should be replaced with server.max-http-header-size
.
spring.jackson.serialization-inclusion
should be replaced withspring.jackson.default-property-inclusion
.spring.activemq.pooled
should be replaced withspring.activemq.pool.enabled
.spring.jpa.hibernate.naming-strategy
should be replaced withspring.jpa.hibernate.naming.strategy
.server.tomcat.max-http-header-size
should be replaced withserver.max-http-header-size
.
'ReleaseNotes' 카테고리의 다른 글
스프링 부트 3.0 릴리즈 노트 (0) | 2024.10.18 |
---|---|
스프링 부트 1.5 릴리즈 노트 (0) | 2017.07.21 |
타임리프3 - Thymeleaf 3 five-minute migration guide (0) | 2015.12.08 |
Spring Boot 1.3.0 릴리즈 노트 (0) | 2015.11.18 |
Spring Boot 1.2 릴리즈 노트 (0) | 2015.11.18 |