@SpringBootApplication
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
스프링부트에서 시작점은 @SpringBootApplicaion 어노테이션이다.
run을 실행하면 서버를 시작할 수 있다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
..
}
내부를 살펴보면 다양한 어노테이션을 확인할 수 있다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {
..
}
@SpringBootConfiguration은 @Configuration이 적용된 빈이다.
@ComponentScan은 @SpringBootApplication이 적용된 클래스 하위 패키지에서 빈을 찾아서 IoC컨테이너 빈으로 등록해주는 역할을 한다.
@EnableAutoConfiguration은 스프링부트에서 필요한 자동설정을 해주는데 ComponentScan이후에 진행한다.
@EnableAutoConfiguration
META-INF/spring.factories
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener
# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer
# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.boot.autoconfigure.integration.IntegrationPropertiesEnvironmentPostProcessor
# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener
# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition
....
자동 설정 타깃 클래스 목록이다. 이 곳에 선언되어있는 클래스들이 @EnableAutoConfiguration사용시 자동 설정 타깃이 된다.
META-INF/spring-configuration-metadata.json
{
"groups": [
{
"name": "server",
"type": "org.springframework.boot.autoconfigure.web.ServerProperties",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
},
{
"name": "server.compression",
"type": "org.springframework.boot.web.server.Compression",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties",
"sourceMethod": "getCompression()"
},
{
"name": "server.error",
"type": "org.springframework.boot.autoconfigure.web.ErrorProperties",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties",
"sourceMethod": "getError()"
},
{
"name": "server.error.whitelabel",
"type": "org.springframework.boot.autoconfigure.web.ErrorProperties$Whitelabel",
"sourceType": "org.springframework.boot.autoconfigure.web.ErrorProperties",
"sourceMethod": "getWhitelabel()"
},
...
}
자동설정에 사용할 프로퍼티 정의 파일이다. 미리 구현된 자동 설정에 프로퍼티만 주입시켜주면 된다.
(따로 환경 설정이 필요없음)
org/springframework/boot/autoconfigure
미리 구현해놓은 설정 리스트로 '{특정설정의 이름}AutoConfiguration' 형식으로 지정되어 있다.
예를 들어 H2 자동설정 한다고 할 때 먼저 spring.factories에서 대상이 되는지 확인한다.
spring-configuration-metadata.json파일에서 해당데이터의 프로퍼티 default값을 확인한다.
{
"name": "spring.h2.console.path",
"type": "java.lang.String",
"description": "Path at which the console is available.",
"sourceType": "org.springframework.boot.autoconfigure.h2.H2ConsoleProperties",
"defaultValue": "\/h2-console"
},
여기에서 주요 프로퍼티값을 어떤 타입으로 설정할 수 있는지 확인이 가능하다.
spring:
h2:
console:
path: /console
application.yml에 프로퍼티를 설정하면 해당 설정으로 사용할 수 있다.
문서를 이용하면 더 쉽게 프로퍼티를 확인할 수 있다.
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
'Spring' 카테고리의 다른 글
Spring Boot security Oauth2 로그인 연동 (구글/카카오) (1) | 2022.02.24 |
---|---|
Spring Boot @DataJpaTest 사용방법 (0) | 2022.02.21 |
Spring Boot 외부 설정 @Value, @ConfigurationProperties (0) | 2022.02.16 |
Spring Boot 멀티 모듈 프로젝트 관리 (0) | 2022.02.15 |
Spring Boot2 Swagger 사용 (0) | 2022.02.08 |