모르지 않다는 것은 아는것과 다르다.

Spring

ApplicationRunner,CommandLineRunner

채마스 2022. 2. 26. 02:12

ApplicationRunner,CommandLineRunner

 

개요

스프링 부트 애플리케이션이 구동될 때마다 앞서 실행시키고 싶은 코드가 있다면, ApplicationRenner, CommandLineRunner 를 이용해서 처리할 수 있다.





ApplicationRunner

  • 코드 예시는 아래와 같다.
@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner start!");
    }
}
  • 위와 같이 설정하면 구동 시점에 run 메소드의 코드가 실행된다.
  • ApplicationArguments 타입의 객체가 run() 메소드의 인자로 넘어온다.





CommandLineRunner

  • 코드 예시는 아래와 같다.
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner start!");
    }
}
  • ApplicationRunner 와 run() 메소드와 차이점은 run() 메소드의 인자다.
  • 위의 코드를 아래와 같이 @Bean 으로 등록해서 대체할 수 있다.
@SpringBootApplication
public class JavaExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(JavaExampleApplication.class, args);
    }

    @Bean
    public CommandLineRunner test(MyRepository myRepository) {
        return new CommandLineRunner() {
            @Override
            public void run(String... args) throws Exception {
                System.out.println("CommandLineRunner start!");
            }
        };
    }
}






@EventListener

  • @EventListener 를 이용해서 위의 기능들을 더 간단하게 처리할 수 있다.
  • 가장 최신에 나온 방법이다.
  • 코드 예시는 아래와 같다.
@SpringBootApplication 
public class SpringinitApplication { 

    public static void main(String[] args) { 
        SpringApplication.run(SpringinitApplication.class, args); 
    } 

    @EventListener(ApplicationReadyEvent.class) 
    public void init(){ 
        System.out.println("Hello EventListener!! ApplicationReadyEvent"); 
    } 
}
  • 스프링은 애플리케이션이 구동되어 서비스 요청을 받을 준비가 되었을 때, ApplicationReadyEvent 이벤트를 발생한다.
  • 따라서 애플리케이션 구동이 완료되면 위와 같은 코드가 구동된다.




REFERENCES

'Spring' 카테고리의 다른 글

BindingResult  (0) 2022.02.26
Bean Validation (BindingResult 개념을 먼저 숙지 해야된다.)  (0) 2022.02.26
API 예외처리  (0) 2022.02.26
Spring AOP  (0) 2022.02.26
@Valid, @Validated  (0) 2022.02.26