seoft

Spring Gradle bootRun시 main으로 인자 전달 및 config 파일에 반영 본문

server

Spring Gradle bootRun시 main으로 인자 전달 및 config 파일에 반영

seoft 2019. 10. 7. 22:04

[문제정의]

 

서버 개발 도중 다음 요구사항이 생김

 

[ 서버가 사용 할 port, 서버에서 사용하는 password ] 를 서버를 실행할 때 인자로 전달하여 config에 반영하고자 함

 

 

 

[문제해결]

 

다음 두가지 과정을 거쳐 해결

 

main문의 (String []args)로 인자 전달하고 받은 인자를 application.yml에 반영하여 해결

 

 

1. main문의 (String []args)로 인자 전달

 

추가적인 그래들 설정 없이, 실행 시 다음의 명령어로 실행 (gradlew대신 gradle도 가능 )

gradlew bootRun --args='port=4000,password=pwd'

 

Intellij 내의 Run에서 사용시

 

 

결과로 java의 메인문인  public static void main(String[] args)   에 전달됨

 

args.length 의 값: 1 

args[0] 의 값(String): "port=4000,password=pwd"

 

  int port = 3000;
  String password = "default";

  port = parsePort(args[0]);
  password = parsePassword(args[0]);


...

 

 

 

2. 받은 인자를 application.yml에 반영

 

만든 SpringApplication 객체에 properties값을 넣으면서 application 파일에 추가 설정 진행

 

*단 기존 application.yml에 해당 key, value값이 없어야함 (여기서는 server.port, server.password)

 

SpringApplication application = new SpringApplication(SeoftIotServerApplication.class);

Properties properties = new Properties();
properties.put("server.port", port);
properties.put("server.password", password);

application.setDefaultProperties(properties);

application.run(args);

 

 

[관련코드] 

https://github.com/seoft/seoft-iot/blob/027ffe28ebc5ff41e4b3605829c62f3ea380da27/seoft_iot_server/src/main/java/kr/co/seoft/seoft_iot_server/SeoftIotServerApplication.java

Comments