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);
[관련코드]