Spring-boot
[Spring boot] 초기화 코드
개발자-김씨
2021. 4. 28. 19:44
반응형
spring boot 학습 & 세팅 4탄 ~
딱히 부트의 내용도 아니고 간단해서 정리안하려다 .... 간단해서 정리
1. CommandLineRunner
CommandLineRunner 보다는 ApplicationRunner을 사용하자
2. ApplicationRunner
ApplicationArguments를 인자로 받기 때문에 다른 방식에 비해 Arguments 처리가 수월한 장점이 있는 듯
@Component
@Order(2)
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("applicationRunner hello");
args.getOptionNames().stream().forEach(name ->
log.info("MyApplicationRunner run.. Options {}={}", name, args.getOptionValues(name))
);
}
}
public interface ApplicationArguments {
String[] getSourceArgs();
Set<String> getOptionNames();
boolean containsOption(String name);
List<String> getOptionValues(String name);
List<String> getNonOptionArgs();
}
3.EventListener
@EventListener를 이용하면 @Async어노테이션을 붙이는 것만으로도 간단하게 비동기로 처리할 수 있고
ApplicationReadyEvent인자를 통해 다양한 처리가 가능하다.
@Configuration
@Slf4j
public class ApplicationReadyEventListener {
@Async
@EventListener
public void ready(ApplicationReadyEvent event) {
log.debug("ApplicationReadyEvent ready ready ready!!");
ConfigurableApplicationContext context = event.getApplicationContext();
SpringApplication springApplication = event.getSpringApplication();
String[] args = event.getArgs();
long eventTime = event.getTimestamp();
}
}
EventListener를 통해 다양한 이벤트를 받을 수 있는데 아래 코드를 통해 발생이벤트들과 호출시점을 확인해 볼수 있다.
@EventListener
public void event(ApplicationEvent event) {
log.debug("{}", event.getClass().getSimpleName());
}
개인적인 정리
편의성에서 차이가 조금 있을 뿐, ApplicationRunner나 EventListener는 별 차이가 없다.
Arguments처리가 조금 복잡하다면 ApplicationRunner로, 비동기 처리를 조금 더 수월하게 하고 싶거나 context접근을 조금 수월하게 하고 싶다면 EventListener방식을이용하자
반응형