부트 개념과 활용-08.SpringApplication
SpringApplication 1부
- 기본 로그 레벨 INFO
- 뒤에 로깅 수업때 자세히 살펴볼 예정
FailureAnalyzer
- 배너
banner.txt gif jpg png - classpath 또는 spring.banner.location
- ${spring-boot.version} 등의 변수를 사용할 수 있음.
- Banner 클래스 구현하고 SpringApplication.setBanner()로 설정 가능.
- 배너 끄는 방법
- SpringApplicationBuilder로 빌더 패턴 사용 가능
- app.setBannerMode(Banner.Mode.OFF)
resource에 해당 파일(banner.txt) 만들어 놓으면 구동시 출력됨. banner.txt
==========================================
01. Jaeuk Spring Boot ${application.version}
==========================================
직접 설정 가능.
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(DemoApplication.class);
app.setBanner((environment, sourceClass, out) -> {
out.println("===============");
out.println("02. jaeuk"); // txt 가 더 우선순위 높음 (동시면 banner.txt 출력)
out.println("===============");
});
// app.setBannerMode(Banner.Mode.OFF); // 배너모드 끌 수 있다.(출력 x)
app.run(args);
}
}
SpringApplicationBuilder 로 실행 가능
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(DemoApplication.class)
.bannerMode(Banner.Mode.OFF)
.run(args);
}
}
SpringApplication 2부
- ApplicationEvent 등록
- ApplicationContext를 만들기 전에 사용하는 리스너는 @Bean으로 등록할 수 없다.
- SpringApplication.addListners()
- WebApplicationType 설정
- 애플리케이션 아규먼트 사용하기
ApplicationArguments를 빈으로 등록해 주니까 가져다 쓰면 됨.
- 애플리케이션 실행한 뒤 뭔가 실행하고 싶을 때
ApplicationRunner (추천) 또는 CommandLineRunner
순서 지정 가능 @Order
@Component
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
System.out.println("====================");
System.out.println("starting application");
System.out.println("====================");
}
}
아무것도 뜨지 않음..
(ApplicationContext를 만들기 전에 사용하는 리스너는 @Bean으로 등록할 수 없다.)
이런 경우에는 addListeners 메서드로 직접 등록을 해 주어야 한다.
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(DemoApplication.class);
app.addListeners(new SampleListener()); // 리스너 추가 (SampleListener)
app.run(args);
}
}
====================
starting application
====================
==========================================
01. Jaeuk Spring Boot
==========================================
2019-12-15 00:40:02.073 INFO 29531 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication on JUui-MacBook-Pro15.local with PID 29531 (/Users/jaeuk/Desktop/demo/target/classes started by jaeuk in /Users/jaeuk/Desktop/demo)
2019-12-15 00:40:02.075 INFO 29531 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default
출력되는 것을 확인할 수 있다.
또한 웹 어플리케이션의 타입 설정하는 부분도 있다.
app.setWebApplicationType(WebApplicationType.NONE);
// 서블릿, 웹플럭스가 있더라도 서블릿이 가장 우선순위
// 근데 웹플럭스만 있는 경우 쓰겠다. (WebApplicationType.REACTIVE)
애플리케이션 아규먼트 사용
설정
VM option : -Dfoo
program arguments : –bar
@Component
public class SampleListener {
public SampleListener(ApplicationArguments arguments) {
System.out.println("foo : " + arguments.containsOption("foo"));
System.out.println("bar : " + arguments.containsOption("bar"));
}
}
2019-12-15 00:52:31.489 INFO 29555 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to default
: default
foo : false
bar : true
2019-12-15 00:52:32.143 INFO 29555 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 0.942 seconds (JVM running for 1.412)
JVM은 애플리케이션 아규먼츠가 아닌 것을 볼 수 있습니다.
애플리케이션 뜬 다음에 뭔가를 추가적으로 실행을 하고 싶다.
2가지가 있긴 한데 ApplicationRunner가 더 좋다.(추천) 기능은 같다.
ApplicationRunner
@Component
public class SampleListener implements ApplicationRunner { // ApplicationRunner
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("foo : " + args.containsOption("foo"));
System.out.println("bar : " + args.containsOption("bar"));
}
}