[Day 26 | Spring] SpringApplication 프로그래밍 인자 설정 (IntelliJ IDEA Ultimate 기준)

y♡ding·2024년 11월 18일

데브코스 TIL - Spring

목록 보기
8/46

SpringApplication :: Spring Boot

스프링 부트 애플리케이션을 IntelliJ IDEA Ultimate 버전에서 실행할 때, 명령줄 인자(Command Line Arguments)를 설정하여 SpringApplication에 전달할 수 있습니다. 이 인자들은 CommandLineRunnerApplicationRunner와 같은 인터페이스에서 사용할 수 있으며, 애플리케이션의 초기 설정, 환경 설정, 또는 특정 기능 테스트에 유용합니다.

IntelliJ IDEA에서 SpringApplication 실행 시 인자 설정 방법

  1. Run/Debug Configurations 열기
    • 메뉴 바에서 Run > Edit Configurations를 클릭합니다.
    • 또는 상단의 실행 설정 메뉴(좌측 상단의 애플리케이션 실행/디버그 드롭다운)에서 Edit Configurations...를 선택합니다.
  2. Modify options를 옵션 보기
    • Add VM Options 체크
    • Program arguments
  3. Program arguments 입력
    • Configuration 창의 Program arguments 필드에 인자를 입력합니다.
    • 여러 인자가 필요하면 공백으로 구분하여 입력합니다.
    • 예: arg1 arg2 key=value
  4. VM options(필요한 경우)
    • JVM 옵션이 필요하다면, VM options 필드에 입력할 수 있습니다. (예: Dspring.profiles.active=dev).
    • 이 옵션은 Program arguments와 다르게 JVM에 전달되는 인자로, 스프링의 프로파일 설정 등에 사용됩니다.
  5. Run or Debug
    • 설정을 저장하고 Run 또는 Debug 버튼을 클릭하여 애플리케이션을 실행합니다.
    • 설정된 인자들은 SpringApplication의 실행 시점에 전달되어, args 배열로 CommandLineRunner 또는 ApplicationRunner 등에서 사용할 수 있습니다.

예제: 명령줄 인자 사용하기

아래는 CommandLineRunner를 사용하여 args 파라미터를 출력하는 간단한 예제입니다.

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 {
        System.out.println("명령줄 인자 출력:");
        for (String arg : args) {
            System.out.println(arg);
        }
    }
}

위 코드를 실행할 때 Program arguments 필드에 다음과 같이 입력한다면:

Hello World key=value

출력은 다음과 같습니다:

명령줄 인자 출력:
Hello
World
key=value

이처럼 IntelliJ에서 Program arguments 필드에 인자를 설정하면, 스프링 부트 애플리케이션이 실행되는 동안 명령줄 인수로 해당 값들을 사용할 수 있습니다.


예제 코드

package org.example.boot;

import org.springframework.boot.Banner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class Boot01Application implements CommandLineRunner {

    public static void main(String[] args) {
        // Spring Boot 시작

        // 1.
        SpringApplication.run(Boot01Application.class, args);
/*
        // 2.
        SpringApplication app = new SpringApplication(Boot01Application.class);
        // 시작 시 환경 설정
        app.setBannerMode(Banner.Mode.OFF);
        app.run(args);
        */

        // 3.

  /*      new SpringApplicationBuilder()
                .sources(Boot01Application.class)
                .bannerMode(Banner.Mode.OFF)
                .run(args);
*/
        // 프로그램 시작 초기값
        // 다른 클래스에서도 활용 가능
        System.out.println("HEllo Spring 1");
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("HEllo Spring 2");
    }
}

//- 
package org.example.boot;

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

import java.util.List;

@Component
public class ArgumentTest {
    public ArgumentTest(ApplicationArguments args) {
        System.out.println("foo : " + args.containsOption("foo")); // false
        System.out.println("bar : " + args.containsOption("bar")); // true

        boolean bar = args.containsOption("bar");
        List<String> files = args.getNonOptionArgs();
        if (bar) {
            System.out.println(files);
        }
    }
}

/*  결과
Hello Spring 2
Hello Spring 1 */

0개의 댓글