1. 이벤트 리스너 : 이벤트가 발생할 때 알려주는 것
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
System.out.println("==========================");
System.out.println("Application is Starting...");
System.out.println("==========================");
}
}
SampleListener.java
But, ApplicationStartingEvent는 ApplicationContext가 만들어지기 전에 발생하기 때문에
빈에 넣어준다고 하더라도 실행되지 않는다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.addListeners(new SampleListener());
app.run(args);
}
}
Application.java
메인에서 app.addListeners(new SampleListener()); 로 직접 만들어 주어야 한다.
2. ApplicationContext가 만들어진 후에 발생하는 이벤트들은 @Component 로 빈에 등록하여 실행시켜주면 된다.
@Component
public class SampleListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
System.out.println("==========================");
System.out.println("Application is Started...");
System.out.println("==========================");
}
}
SampleListener.java
- ApplicationStartedEvent는 ApplicationContext가 만들어진 후에 발생한다.
3. app.setWebApplicationType();
에는 WebApplicationType.NONE, WebApplicationType.SERVLET, WebApplicationType.REACTIVE가 있다.
기본적으로는 SERVLET !
WebFlux를 사용하고 싶다면, REACTIVE
사용하고 싶지 않다면, NONE
4. 애플리케이션 아규먼츠 사용하기
SpringApplication을 실행할 때 program arguments에 대해 추상화된 액세스 기능을 제공하는 인터페이스이다.
@Component
public class SampleListener {
public SampleListener(ApplicationArguments arguments){
System.out.println("foo: " + arguments.containsOption("foo"));
System.out.println("bar: " + arguments.containsOption("bar"));
}
}
-> 빈에 생성자가 한 개이고, 그 생성자의 파라미터가 빈일 경우에는 그 빈을 스프링이 알아서 주입해줌
< 결과 >
foo: false
bar: true
-> VM option은 ApplicationArgument 가 아님
5. 애플리케이션 실행 후 뭔가 추가적으로 실행하고 싶을 때
- ApplicationRunner (추천) 또는 CommandLineRunner
- 순서 지정 가능 @Order
@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"));
}
}
@Component
public class SampleListener implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
Arrays.stream(args).forEach(System.out::println);
}
}
'Programming > Spring' 카테고리의 다른 글
활용 3) 외부설정 : application.properties (0) | 2020.10.11 |
---|---|
기초 1) 스프링 빈(Bean) (0) | 2020.10.10 |
활용 1) SpringApplication 1 : 커스터마이징, 배너 (0) | 2020.10.10 |
이론 3) 독립적으로 실행되는 jar 파일, 스프링부트 원리 (0) | 2020.10.06 |
이론 2) 컨테이너와 포트, http & https & http2 (0) | 2020.10.06 |