본문 바로가기
OpenSource/Spring Boot

springboot에서 main args를 사용하려면?

by 태하팍 2021. 7. 2.
반응형

내가 하고 싶은 것은 아래와같이 argument에 날짜를 넣고 그것을 메인쪽에 있는 String[] args에서 받아서 처리하는 것이다.

디버깅을 해보면 args에 위에서 설정했던 값이 들어오는것 처럼 보인다.

그러나 현실은 에러!! 아래에 보면 public void run()쪽에서 예외가 나버린다.
java.lang.reflect.InvocationTargetException

콘솔창에 찍힌 오류 내용

Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.NullPointerException
	at com.kakaoenterprise.errorlog.controller.ErrorLogController.excuteMagnager(ErrorLogController.java:19)
	at com.kakaoenterprise.errorlog.ErrorlogApplication.main(ErrorlogApplication.java:12)
	... 5 more

 

위의 코드에서 어떻게 변해야 args를 가져다가 잘 사용할 수 있을까?
ApplicationRunner를 implemets하였다.
그리고 run을 Overriding하여 사용.

package com.kakaoenterprise.errorlog;

import com.kakaoenterprise.errorlog.controller.ErrorLogController;


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

@SpringBootApplication
public class ErrorlogApplication implements ApplicationRunner
{


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

    @Override
    public void run( ApplicationArguments args ) throws Exception
    {

        String[] errorLogDate = args.getSourceArgs();

        if(errorLogDate.length <= 0){
            errorLogDate = new String[]{
                    "20210627"
            };

        }
        //System.out.println( "DATE: " + errorLogDate[0] );
        ErrorLogController errLog = new ErrorLogController();
        errLog.excuteMagnager(errorLogDate[0]);
    }

}

jar파일에서 구동시에는 아래와 같은 명령어를 사용.

java -jar errorlog-0.0.1-SNAPSHOT.jar 20210701

 

반응형