SpringApplication이 시작한 시점에 특정 코드를 실행하고자 한다면, ApplicationRunner나 CommandLineRunner를 활용할 수 있다.
두 개의 Runner 인터페이스 중 하나를 선택하여 implements하여 메서드를 오버라이드하고, 빈으로 등록해주면 사전 준비는 완료된다.


ApplicationRunner

run(ApplicationArguments args) 메서드 하나만 오버라이드하면 되며 파라미터인 ApplicationArguments에 바인딩된 어플리케이션 아규먼트들에 접근이 가능하다.
ApplicationArguments는 여러가지 편리한 메서드를 제공하고 있다. 그러므로 아래에서 설명할 CommandLineRunner보다 사용이 권장된다. 아래는 커맨드로 Option, Non-Option Argument를 설정 후 기동 했을 때의 테스트 코드이다.

어플리케이션 기동 커맨드 : java -jar MySpringBootApp.jar alone1 alone2 --key1=value1 --key2=value2

  @Component
  public class SimpleApplicationRunner implements ApplicationRunner {
      @Override
      public void run(ApplicationArguments args) {
          System.out.println("======================================================");
          System.out.println("ApplicationRunner - ApplicationArguments ");
          System.out.println("NonOption Arguments : " + args.getNonOptionArgs());
          System.out.println("Option Arguments Names : " + args.getOptionNames());
          System.out.println("key1의 value : " + args.getOptionValues("key1"));
          System.out.println("key2의 value : " + args.getOptionValues("key2"));
          System.out.println("======================================================");
      }
  }
======================================================
ApplicationRunner - ApplicationArguments
NonOption Arguments : [alone1, alone2]
Option Arguments Names : [key1, key2]
key1의 value : [value1]
key2의 value : [value2]
======================================================

CommandLineRunner

ApplicationRunner와 기능은 같지만 전달되는 아규먼트가 더 불친절하다. 그리고 Option과 Non-Option 아규먼트의 구분도 없고 아규먼트도 단순 배열로 전달된다.
위와 동일한 커맨드로 기동 했을 때의 코드와 로그이다. 

어플리케이션 기동 커맨드 : java -jar MySpringBootApp.jar alone1 alone2 --key1=value1 --key2=value2

  @Component
  public class SimpleCommandLineRunner implements CommandLineRunner {
      @Override
      public void run(String... args) throws Exception {
          System.out.println("======================================================");
          System.out.println("CommandLineRunner - String... ");
          for(String s : args){
              System.out.println("argument : " + s);
          }
          System.out.println("======================================================");
      }
  }
======================================================
CommandLineRunner - String...
argument : alone1
argument : alone2
argument : --key1=value1
argument : --key2=value2
======================================================

 

+ Recent posts