본문 바로가기
BACK-END/JAVA

Spring Boot Appliction이 구동 될 때 실행되는 코드 추가하기

by 개남 2022. 12. 7.

Spring Boot에서 SpringApplication이 구동 될 때 특정 코드를 실행하고 싶으면 ApplicationRunner, CommandLineRunner를 사용하면됩니다. 둘다 run 매서드 내부에 구현한 코드를 SpringApplication 구동시 실행하지만 차이점은 arguments를 받는 Parameter에 있습니다.

ApplicationRunner : ApplicationArguments 

CommandLineRunner : String... (String 배열)

ApplicationRunner 구현

package devnam.tistory.com;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class ApplicationRunnerTest implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) {
      System.out.println("======================================================");
      System.out.println("ApplicationRunner Example");
      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("======================================================");
    }
}

CommandLineRunner 구현

package devnam.tistory.com;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class CommandLineRunnerTest implements CommandLineRunner {
    @Override
      public void run(String... args) throws Exception {
         System.out.println("======================================================");
         System.out.println("CommandLineRunner Example");
         for(String s : args){
           System.out.println("argument : " + s);
         }
         System.out.println("======================================================");
      }
}

arguments를 위와 같이 주고 Spring Boot App을 가동해줍니다.

결과값

 ======================================================
 ApplicationRunner Example
 NonOption Arguments : [test1, test2]
 Option Arguments Names : [spring.output.ansi.enabled, key1, key2]
 key1의 value : [value1]
 key2의 value : [value2]
 ======================================================
 ======================================================
 CommandLineRunner Example
 argument : --spring.output.ansi.enabled=always
 argument : test1
 argument : test2
 argument : --key1=value1
 argument : --key2=value2
 ======================================================

하나의 Project에 ApplicationRunner, CommandLineRunner 둘다 함께 사용할 수있는데 순서를 지정하지 않으면 ApplicationRunner가 먼저 실행되고 CommandLineRunner가 실행됩니다. 만약 순서를 정하고 싶다면 @Component 어노테이션위에 @Order(1) , @Order(2) 와 같이 넣어주면  Order순으로 실행이됩니다.

 

댓글