스프링부트 - Runners

Spring Boot/개발환경|2019. 4. 11. 01:25

스프링 부트가 구동되는 시점에 특정 코드를 실행 시키기 위해서는
Command Line Runner와 Application Runner를 이용할 수 있습니다.
두 Runner는 스프링 부트에서 제공되는 인터페이스입니다.

Maven 의존성 라이브러리

pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>

1. CommandLineRunner

1-1. CommandLineRunner 예제

DemoApplication.java
package com.developer.hive.demo;

import java.util.Arrays;
import java.util.stream.Collectors;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

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

    @Override
    public void run(String... args) throws Exception {
        // TODO Auto-generated method stub
        String argsArray = Arrays.stream(args).collect(Collectors.joining(","));
        System.out.println("CommandLineRunner 시작 : args = " + argsArray);
    }
}

1-2. STS Run Configurations...

실행환경을 설정하기위 Run > Run Configurations... 메뉴를 클릭하여 줍니다.

1-3. STS Run Configurations > Arguments

Arguments 탭에서 a b c 값을 넣어주고 Run 버튼을 클릭

1-4. 결과

자세히 보시면 Arguments 탭에서 입력한 값 앞쪽에 입력하지 않은 --spring.output.ansi.enabled=always 값이 보입니다.

STS Run Configurations...

ANSI console output 버튼을 클릭 해제해 줍시다.

결과

이제서야 Arguments에 입력한 a b c 값만 출력이 되었습니다.
ANSI 콘솔이 해제되어 컬러가 없지만 --spring.output.ansi.enabled=always 문자열 값이 들어가지 않습니다.


2. ApplicationRunner

2-1. ApplicationRunner 예제

package com.developer.hive.demo;

import java.util.List;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements ApplicationRunner {

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

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // TODO Auto-generated method stub
        List<String> argsList = args.getNonOptionArgs();
        System.out.println("ApplicationRunner 시작 : args = " + argsList.toString());
    }
}

2-2. STS Run Configurations > Arguments

Arguments 탭에서 x y z 값을 넣어주고 Run 버튼을 클릭

2-3. 결과

Arguments x y z 값이 출력되었습니다.


3 @Order 어노테이션

3-1. @Order 어노테이션 예제

package com.developer.hive.demo;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;

@SpringBootApplication
public class DemoApplication {

    @Order(1)
    @Configuration
    public class TestCommandLineRunner implements CommandLineRunner {

        @Override
        public void run(String... args) throws Exception {
            // TODO Auto-generated method stub
            String argsArray = Arrays.stream(args).collect(Collectors.joining(","));
            System.out.println("CommandLineRunner 시작 : args = " + argsArray);

        }
    }

    @Order(3)
    @Configuration
    public class TestCommandLineRunner1 implements CommandLineRunner {

        @Override
        public void run(String... args) throws Exception {
            // TODO Auto-generated method stub
            String argsArray = Arrays.stream(args).collect(Collectors.joining(","));
            System.out.println("CommandLineRunner1 시작 : args = " + argsArray);

        }
    }

    @Order(2)
    @Configuration
    public class TestApplicationRunner implements ApplicationRunner {

        @Override
        public void run(ApplicationArguments args) throws Exception {
            // TODO Auto-generated method stub
            List<String> argsList = args.getNonOptionArgs();
            System.out.println("ApplicationRunner 시작 : args = " + argsList.toString());

        }
    }

    @Order(4)
    @Configuration
    public class TestApplicationRunner1 implements ApplicationRunner {

        @Override
        public void run(ApplicationArguments args) throws Exception {
            // TODO Auto-generated method stub
            String[] argsList = args.getSourceArgs();
            System.out.println("ApplicationRunner1 시작 : args = [" +  Arrays.stream(argsList).collect(Collectors.joining(", "))+"]");
        }
    }

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

}

3-2. 결과

@Order 어노테이션 예제 순서대로 실행된것을 확인할 수 있습니다.

댓글()