kok202
스프링 부트 강의 정리 (6~7 : SpringApplication)

2019. 4. 20. 20:40[공부] 영상/스프링 부트 강의

SpringApplication 클래스

public static void main(String[] args) {
	SpringApplication.run(MySpringConfiguration.class, args);
}

 

  1. 스프링은 MainApplication 클래스 안의 main 메소드에서 SpringApplication.run() 을 이용하여 실행된다.
  2. info level 에서 logging 할 수 있도록 해준다. (application.properties 또는 application.yml를 이용하여 logging level을 바꿀 수도 있긴하다.) 참조 : https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-custom-log-levels
  3. failure analyzer를 추가할 수 있다. failure analyzer 가 없으면 전체 condition report를 log로 찍어준다.
  4. SpringApplication을 커스터마이징 할수 있다. (ex. 배너를 변경할 수 있다. // 상세 설명 참조, XML 설정파일을 변경 할 수 있다. 등...)
  5. SpringApplicationBuilder를 사용하면 커스터마이징하는 것을 도와줄 수 있다.
  6. 어떤 이벤트는 ApplicationContext의 생성 전에 Trigger 되는 경우가 있다. 그런데 이러한 이벤트를 처리하기 위해 Bean에 event Listener 를 등록해 버리면 해당 이벤트는 잡히지 않을 것이다. (모든 Bean들이 생성되지 않은 상태이므로) 이러한 이벤트들을 SpringApplication에 등록 할 수 있다. // 상세 설명 참조
  7. SpringApplication 은 적절한 타입의 ApplicationContext를 만드려고 시도한다. 기본적으로 시도하는 Application Context는 // 상세 설명 참조
  8. Spring 을 실행할 때 사용한 Command line argument 프로젝트에서 사용할 수 있다. // 상세 설명 참조
  9. SpringApplication의 종료는 JVM shutdown으로 설정되어 있기 때문에 gracefully 하게 종료된다. ApplicationContext 가 안전하게 종료되므로 Spring lifecycle에 존재하는 모든 콜백 함수가 실행되고 종료된다.
  10. Admin 설정을 통해서 Spring boot application을 원격에서 종료, 실행, 재시작을 할 수 있다. (JConsole을 이용해서)

 

 

 

 

 

@PostConstruct

해당 Annotation이 달려있는 메소드는 이 클래스를 Bean을 만들고나서 자동으로 호출되도록 한다.

 

 

 

 

 


상세 설명

4번 스프링 부트 배너를 바꿀 수 있다.

관련 포스팅은 아래 글을 참조하자.

https://beyondj2ee.wordpress.com/2017/03/17/springboot-%EB%B0%B0%EB%84%88-%EB%A7%8C%EB%93%A4%EA%B8%B0/

 

SpringBoot 배너 만들기

Springboot를 기동할때 콘솔을 보면 “Spring” 텍스트 이모티콘을 보게된다. 이것을 “Springboot banner”라고 합니다. 해당배너를 좀더 개발자스럽게 변경을 하겠습니다. 먼저 해당소스에서 main/resources/banner.txt 파일을 생성 합니다. 해당 파일에 “Beyo…

beyondj2ee.wordpress.com

 

 

 

 

 

6번 배너를 안보이게 하고 Application이 시작될 때 "Application is started" 를 출력하도록 할 경우

public static void main(String[] args) {
	SpringApplication app = new SpringApplication(MySpringConfiguration.class);
	app.setBannerMode(Banner.Mode.OFF);
	app.addListener(new MyListener());
	app.run(args);
}
public class MyListener implemnets ApplicationListener<ApplicationStartedEvent>{
	@Override
	public void onApplicationEvent(ApplicationStartedEvent event){
		System.out.println("Application is started");
	}
}

 

 

 

 

 

7번 SpringApplication이 시도하는 기본적인 ApllicationContext

Spring MVC 이 존재할 경우 AnnotationConfigServletWebServerApplicationContext
Spring MVC 이 존재하지 않고  
Spring Web Flux 가 존재할 경우
AnnotationConfigReactiveWebServerApplicationContext
둘다 아닐 경우 AnnotationConfigApplicationContext

 

 

 

 

 

8번

Spring 을 실행할 때 사용한 Command line arguments를 받는 방법들

1. ApplicationArguments 클래스 이용하기

2. ApplicationRunner 나 CommandLineRunner 인터페이스를 상속 받는 객체 만들기

3. @Value 이용하기.  // 이걸 쓰자 훨씬 깨끗하다.

ApplicationArgument를 @Value로 주입받는 방법

 

커맨드라인 예시 : java -jar target/application0-0-1=SNAPSHOT.jar --myOption=hello --myOption=world

@Value("${myOption}") 
private String[] myOptions;