[Spring Boot #6] 이벤트 리스터
- 📚 Spring/Spring Boot
- 2020. 4. 26. 17:40
| 이벤트 리스터(Event Listener)
스프링부트를 실행할 시 구동되는 단계마다 여러 이벤트들이 발생한다. 개발할 때 이 이벤트들을 나타내는 객체를 인자로 받아 각 단계마다 원하는 처리를 할 수 있다.
먼저 ApplicationStartingEvent와 ApplicationStartedEvent를 알아보자.
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
'📚 Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot #8] 스프링 부트 프로파일(Profile) (0) | 2020.04.28 |
---|---|
[Spring Boot #7] 스프링 부트 외부 설정 (0) | 2020.04.27 |
[Spring Boot #5] 스프링부트 HTTP/2 적용 - undertow (0) | 2020.04.25 |
[Spring Boot #4] 스프링부트 HTTPS, HTTP2 (0) | 2020.04.25 |
[Spring Boot #3] 스프링부트 자동 설정 : @ConditionalOnMissingBean, @ConfigurationProperties (0) | 2020.04.24 |