📌 [SpringBoot] SpringApplication
📕 Debug log 출력하기
기본적으로 INFO
레벨까지만 로그를 찍어주는데 Debug 모드로 설정하면 Debug
레벨까지 로그를 찍어준다. 어떤게 자동설정이 되고 왜 안되는지 까지 나온다.
이와같이 VM option에 -Ddebug
라고 옵션을 입력하면 디버그 모드로 전환된다.
📕 FailureAnalyer 란?
Error 메세지를 좀 더 이쁘게 띄워줌. 위의 document에 가보면 설정법이 나와잇음. 각종 변수들로 application 정보들을 출력할 수도 있고 , 자신만의 배너를 만들어서 이쁘게 만들어 줄 수 있다.
배너는 resource
폴더 안에 banner.txt
파일을 추가하면 내가 만든 로고를 띄워줄수 있다. (application.properties
에서 banner 속성 및 경로를 변경할 수 있다. spring.banner
에 있음)
이런식으로 Spring 로고 대신 내가 만든 로고가 출력된다.
가끔 MANIFEST.MF
파일이 필요한 변수들이 있다. 해당 파일이 없으면 나오지 않는 경우가 있다. MANIFEST.MF
는 mvn package
를 해서 .jar
파일로 만들어 줄때 생성된다.
원래 Spring Boot
를 사용해서 application을 띄울때 SpringApplication.run()
메서드를 많이 사용하는데 이렇게 하면 커스터마이징을 할 수 없기 때문에 SpringApplication
객체를 생성한 후에 run을 해주는 방법으로 application을 띄울 수 있다.
public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
SpringApplication application = new SpringApplication(DemoApplication.class);
application.run();
}
이런식으로 실행이 가능하다.
예를들어 내가 배너를 띄우지 않고 싶다 라고 하면
public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
SpringApplication application = new SpringApplication(DemoApplication.class);
application.setBanner(new Banner() {
@Override
public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
out.println("===============");
out.println("DDINGG on Spring Boot");
out.println("===============");
}
});
application.setBannerMode(Banner.Mode.OFF);
application.run();
}
이런식으로 코드로 베너를 띄울 수도 있고 ON/OFF 할 수도 있다.
그렇다면 text 파일과 코딩을 동시에 설정했을때는 어떤게 우선순위로 출력이 될까?
🥕text파일이 먼저 출력된다!!
📕 Application EventListener 설정하기
// Application이 시작될 때 실행되는 리스너
@Component
public class SampleListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
System.out.println("==============================");
System.out.println("Application Start from DDINGG");
System.out.println("==============================");
}
}
🥕 Bean 형식으로 만드는 EventLister들을 사용할때 주의할점!
이벤트가 언제 발생하는지가 중요한 기점인데, ApplicationContext
가 만들어진 후에 실행되는 이벤트 들이 Bean
으로 등록되어 있을때는 정상적으로 호출이 되지만, ApplicationContext
가 만들어지기 전에 실행되는 이벤트 들은 Bean
을 불러올 수 없다. ApplicationStartEvent
이벤트가 그렇다! 따라서 위 코드에서 @Component
는 의미가 없다!
🙏 잠깐! ApplicationContext 가 뭘까?
ApplicationContext
는 IoC 컨테이너의 일종으로BeanFactory
(요친구도 IoC 컨테이너의 일종)는 lazy-loading(사용자가 필요할때 Bean을 생성) 인 반면ApplicationContext
는 pre-loading 으로 시작할때Bean
을 만들고 시작한다. 따라서ApplicationContext
에 등록된Bean
은 바로 사용 할 수 있다.
Bean
에 등록이 되지 않은 경우에는 Listener
를 직접 등록을 해주어야 한다.
// Listener 등록 예제
public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
SpringApplication application = new SpringApplication(DemoApplication.class);
application.addListeners(new SampleListener());
application.run();
}
🙄 그럼 Application이 실행된 이후의 EventListener들은 Bean에만 등록하면 정상적으로 동작할까?
🥕 정상적으로 동작한다. 위 코드 처럼 따로 Listener를 등록해줄 필요는 없다.
📕 WebApplicationType 수동으로 정해주기
public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
SpringApplication application = new SpringApplication(DemoApplication.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run();
}
WebApplication이 없이 application이 올라감.
NONE 이외에 다른 옵션들도 있다. 자세한건 여기 spring Document 참고
'개발공부 > Spring' 카테고리의 다른 글
[SpringBoot] Jar 파일로 서버 실행시키기 (0) | 2020.05.03 |
---|---|
[SpringBoot] Spring 에서 내장 웹 서버의 이해와 Servelt / ssl 인증 (0) | 2020.05.03 |
[SpringBoot] Spring Boot 소개 (0) | 2020.05.03 |
[SpringBoot] Spring 에서 자동설정의 이해와 구현 (AutoConfiguration) (0) | 2020.05.03 |
[SpringBoot]Spring AOP와 프록시 패턴 (0) | 2020.05.01 |