Spring Boot는 기존 Springframework Web MVC와는 달리 자동 설정(auto configuration) 기능에 크게 의존하고 있다.
auto configuration이란 애플리케이션의 jar 의존성에 기초하여 애플리케이션을 자동으로 설정하는 기능을 말한다. 예를 들면, classpath에 HSQLDB가 존재하면 개발자가 직접 데이터베이스 연결 bean을 설정하지 않았더라도 자동으로 적절한 default값을 가지고 데이터베이스 연결 bean을 생성하고 주입해준다.
이렇게 동작하도록 annotation을 지정할 수 있는데, @EnableAutoConfiguration이 그것이다. @SpringBootApplication
annotation을 사용하면 자동으로 이 annotation이 포함된다.
@EnableAutoConfiguration annotation 내부에서는 @Import annotation을 이용하여 AutoConfiguratonImportSelector 클래스의 기능을 사용하게 된다.
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
}
만약에, 개발자가 DataSource bean을 추가한다면, default로 삽입되었던 데이터베이스 연결 bean이 제거되고 명시적으로 지정한 DataSource bean이 사용되는 것이다.
@EnableAutoConfiguration annotation의 속성으로 exclude를 지정할 수 있는데, 여기서 특정 클래스를 나열하에 자동 설정에서 제외하게 된다.
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
또는 ...ConfigurationSupport 류의 지원 클래스를 이용하는 방법도 존재한다.
일반적인 Spring Boot 애플리케이션은 외부 의존성이 종류별로 하나씩만 사용된다고 가정하는 편이라서, 예를 들어 MySQL 데이터베이스 연결을 두 개 사용하려면 자동 설정만으로는 해결이 안 될 수도 있다. 이런 경우에 자동 설정 대신에 데이터베이스 연결 bean을 두 개 생성해서 사용할 필요가 있다.