반응형

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. 애플리케이션 아규먼츠 사용하기

* ApplicationArguments

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);

    }
}

 

반응형

+ Recent posts