SpringApplication
스프링 부트 로그
스프링부트 기본 로그 레벨은 INFO이다.
Debug모드로 실행하게 된다면 자동설정 여부를 알 수가 있다.
FailureAnalyzer
에러가 났을 때 이쁘게 출력하게
베너
아래와 같이 resources 안에 banner.txt를 만들게 되면 수정된 배너를 출력하게 할 수 있다.
배너의 기본 출력은 기본적으로 UTF-8이다.
txt파일로 설정 말고 아래와같이 메소드를 직설 만들어서 설정이 가능하다.
@SpringBootApplication
public class SpringBootStudyApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(SpringBootStudyApplication.class);
application.setBanner(new Banner() {
@Override
public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
out.println("=========================");
out.println("베너 테스트!");
out.println("=========================");
}
});
app.run(args);
}
}
txt파일과 메소드를 직접 만들어서할 경우
txt파일이 이김
배너에 추가될 수 있는 기능들
Application Events and Liseners
발생 시점
- 애플리케이션이 시작할때
- ApplicationContext가 만들어졌을때
- ApplicationContext refresh 되었을때
- Application이 잘 구동이 되었을 때
- 애플리케이션이 준비가 되었을 때, 에러가 발생되었을 때 등등.
SpringApplication 실행 전후 Liseners
ApplicationContext가 만들어졌는지 안되었는지가 중요
ApplicationContext를 만들기 전에 사용하는 Liseners는 @Bean으로 등록 할 수 없다.
SampleListener Class에 Bean으로 등록하지 않은 이유는 ApplicationStartingEvent의경우 Bean을 등록하는 ApplicationContext객체가 생성되기 전에 만들어주기 때문에 아래와 같이 SpringApplication.addLitener에 추가해줘야된다.
@SpringBootApplication
public class SpringBootStudyApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(SpringBootStudyApplication.class);
app.addListeners(new SampleListener());
app.run(args);
}
}
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent event) {
System.out.println("=============================");
System.out.println("Application is starting");
System.out.println("=============================");
}
}
WebApplicationType 설정
ApplicationArguments를 빈으로 등록
WebApplication의 종류
- WebApplicationType.SERVLET
- Spring MVC를 사용할 때
- Spring webflux,Spring MVC가 같이 들었을 때 SERVELT이 기본 설정으로 됨
- Servlet이 있는경우 SERVLET 타입으로 돈다.
- WebApplicationType.REACITVE
- Spring webflux를 사용할 때
- WebApplicationType.NONE
- Spring webflux,Spring MVC 이 없을 때 none으로 돔
Application Argument
Run Configurationㄴ에 들아가서 아래와 같이 설정해 준다.
-D로 시작하는 옵션은 JVM옵션이고,
--로 시작하는 옵션이 Application Argument이다.
arguments을 출력할 class를 만든 후 실행을하게되면 아래와같은 결과가 발생이된다.
@Component
public class ArgumentTestComponent {
public ArgumentTestComponent(ApplicationArguments arguments) {
System.out.println("foo : " + arguments.containsOption("foo"));
System.out.println("bar : " + arguments.containsOption("bar"));
}
}
결론
--로 들어오는 옵션만 argument로 사용하는 것이다.(JVM옵션은 Application argument가 아니다.)
ApplicationRunner(추천) 또는 CommandLineRunner
애플리케이션 실행한 뒤 뭔가 실행하고 싶을 때
ApplicationRunner는 ApplicationArguments이란 타입으로 메소드를 만들어 준다.
그리고 ApplicationRunner가 여러개인 경우 @Order 어노테이션을 붙여 순서를 지정해 줄 수 있다.
@Component
@Order(1)
public class OrderTest1 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("======================================");
System.out.println("내가 테스트1번에서 한것이여 내가!!");
System.out.println("foo : " + args.containsOption("foo"));
System.out.println("bar : " + args.containsOption("bar"));
System.out.println("======================================");
}
}
@Component
@Order(2)
public class OrderTest2 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("======================================");
System.out.println("내가 테스트222222번에서 한것이여 내가!!");
System.out.println("foo : " + args.containsOption("foo"));
System.out.println("bar : " + args.containsOption("bar"));
System.out.println("======================================");
}
}