https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-spring-application.html%23 boot-features-application-events-and-listeners
Spring Boot Features
If you need to call remote REST services from your application, you can use the Spring Framework’s RestTemplate class. Since RestTemplate instances often need to be customized before being used, Spring Boot does not provide any single auto-configured RestT
docs.spring.io
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 |