https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-spring-application.html%23 boot-features-application-events-and-listeners
Application Events and Listeners
시점
- Application이 시작될 때
- Application-context를 만들었을 때
- Application이 구동이 되었을 때
- Application 구동에 실패했을 때
...
ApplicationStartingEvent
application-context 생성 이전에 발생하는 event
즉 Bean이 생성되기 이전에 발생함 -> Bean으로 등록이 안돼서 실행이 되지 않는다.
@Component
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
System.out.println("========================");
System.out.println("Application is starting");
System.out.println("========================");
}
}
@SpringBootApplication
public class SpringinitApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SpringinitApplication.class);
springApplication.addListeners(new SampleListener());
springApplication.run(args);
}
}
이럴 때는 위와 같이 직접 등록을 해주어야 한다. (위의 코드 중 @Component는 사실상 필요 없다.)
ApplicationStartedEvent
빈으로만 등록되면 실행된다. (위와 다르게)
@Component
public class SampleListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
System.out.println("=====================");
System.out.println("started!");
System.out.println("=====================");
}
}
Web Application Type
- Spring MVC가 들어있음 : SERVLET
- Spring WebFlux가 들어있음 : REACTIVE
- 둘 다 들어있으면 : SERVLET
애플리케이션 아규먼트 사용하기
Edit Configurations 설정을 통해 아규먼트 지정
@Component
public class SampleListener {
public SampleListener(ApplicationArguments arguments) {
System.out.println("foo: "+arguments.containsOption("foo"));
System.out.println("bar: "+arguments.containsOption("bar"));
}
}
애플리케이션 실행한 뒤 뭔가 실행하고 싶을 때 - ApplicationRunner
@Component
public class SampleListener implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("foo : "+ args.containsOption("foo"));
System.out.println("bar : "+ args.containsOption("bar"));
}
}
- ApplicationRunner (추천) 또는 CommandLineRunner
- 순서 지정 가능 @Order
'Spring > Spring Boot' 카테고리의 다른 글
(SpringBoot) Logging (0) | 2020.01.05 |
---|---|
(SpringBoot) 프로파일 (0) | 2020.01.05 |
(SpringBoot) 외부설정(2) (0) | 2020.01.04 |
(SpringBoot) 외부설정(1) (0) | 2020.01.04 |
(SpringBoot) SpringApplication(1) (0) | 2020.01.02 |