반응형

Spring boot 실행할 때 args 를 전달해서 사용하는 방법입니다.

Spring boot에서  org.springframework.boot.ApplicationArguments 를 제공하고 있어서 Bean으로 받아서 사용하면 간단하게 쓸 수 있습니다.


1. getSourceArgs

 - 입력한 args 그대로 배열로 받아 옵니다.


2. getOptionNames

 - args 앞에 "--" 를 붙이면 옵션으로 인식 합니다. 옵션 args 사용 형식 --NAME=VALUE 

 - "--fruit=apple" 이렇게 args를 사용하면

 - getOptionName는 fruit 처럼 option name 들의 배열을 받아 옵니다.


3. getNonOptionArgs

- "--" 가 없는 경우 NonOption으로 인식합니다.

- "--" 가 없는 args 들의 값들을 받다 옵니다.


설명보다 아래 sample code를 보시는게 이해가 빠를 것 같습니다.

 


DemoApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
package com.example.demo;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}


Test.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.example.demo;
 
import java.util.List;
import java.util.Set;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
 
@Component
public class Test implements ApplicationListener<ContextRefreshedEvent> {
  @Autowired
  private ApplicationArguments applicationArguments;
 
  @Override
  public void onApplicationEvent(ContextRefreshedEvent event) {
    String[] sourceArgs = applicationArguments.getSourceArgs();
    List<String> nonOptionArgs = applicationArguments.getNonOptionArgs();
    Set<String> optionNames = applicationArguments.getOptionNames();
 
    System.out.println("---원본 args---");
    for (String sourceArg : sourceArgs) {
      System.out.println(sourceArg);
    }
    System.out.println("---옵션아닌 args---");
    for (String nonOptionArg : nonOptionArgs) {
      System.out.println(nonOptionArg);
    }
    System.out.println("---옵션 args---");
    for (String optionName : optionNames) {
      List<String> optionValues = applicationArguments.getOptionValues(optionName);
      for (String optionValue : optionValues) {
        System.out.println(optionName + ":" + optionValue);
      }
    }
  }
 
}



Execute

 $JAVA_HOME/bin/java -jar demo.jar HI --MY_NAME=GONI --YOUR_NAME=GUEST --my.hobby=영화 --my.hobby=독서

* option args 에서 name 을 같게 해서 여러번 써서 List로 받을 수 있습니다.


Result

---원본 args---
--spring.output.ansi.enabled=always
HI
--MY_NAME=GONI
--YOUR_NAME=GUEST
--my.hobby=영화
--my.hobby=독서
---옵션아닌 args---
HI
---옵션 args---
spring.output.ansi.enabled:always
MY_NAME:GONI
YOUR_NAME:GUEST
my.hobby:영화
my.hobby:독서


반응형

+ Recent posts