[Spring Boot #6] 이벤트 리스터

 

| 이벤트 리스터(Event Listener) 

스프링부트를 실행할 시 구동되는 단계마다 여러 이벤트들이 발생한다. 개발할 때 이 이벤트들을 나타내는 객체를 인자로 받아 각 단계마다 원하는 처리를 할 수 있다.

먼저 ApplicationStartingEventApplicationStartedEvent를 알아보자.

ApplicationStartingEvent은 주의할 부분이 스프링컨테이너가 만들어지기 전에 생성되는 이벤트이기 때문에 SpringApplication 객체에 해당 리스터를 추가해야 한다.

package org.kyhslam;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {

        SpringApplication app = new SpringApplication(Application.class);
        app.addListeners(new SampleListener());
        app.run(args);

        //SpringApplication.run(Application.class, args);

    }
}
package org.kyhslam;

import org.springframework.boot.context.event.ApplicationStartingEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@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("===========================");
    }
}

실행하면 아래 처럼 먼저 실행되어 보여진다.

반대로 ApplicationStartedEvent 처럼 스프링 컨테이너가 만들어진 이후에 생성되는 이벤트들은 아래와 같이 스프링 빈 등록을 통해 이벤트를 처리 할 수 있다.

package org.kyhslam;

import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class SampleListenerStarted implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
        System.out.println("=====================");
        System.out.println("Started");
        System.out.println("=====================");
    }
}

결과를 보면 ApplicationStartedEvent은 스프링 컨테이너가 만들어진 이후에 생성되는 것을 볼 수 있다

| 스프링 부트 커맨드 인수 처리 

스프링부트는 어플리케이션 실행될 때 준 커맨드 인수 옵션을 수월하게 처리할 수 있다. 주목할 점은 VM옵션은 처리하지 않고 오직 커맨드 인수 옵션만 처리한다는 것이다.

아래와 같이 옵션을 주고 실행할 경우 스프링부트는 -Dfoo VM 옵션은 무시한 채 --bar을 처리한다.

java -jar target\springboot-tutorial-1.0-SNAPSHOT.jar -Dfoo --bar
@Component
public class AppRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("foo: " + args.containsOption("foo")); // VM옵션은 arguments가 아니다
        System.out.println("bar: " + args.containsOption("bar"));
    }
}
foo: false
bar: true

댓글

Designed by JB FACTORY