최근 배치 프로그램 개발 중, 특정 스케줄러 메서드만 테스트 및 디버깅을 해야 하는 상황이 많았다. 이때 테스트 코드를 작성하는 방법도 있었지만, 더 간단하고 빠르게 실행할 방법을 찾다가 Program Arguments를 활용한 방법을 알게 되었다.
Edit Configurations > Modify Options > Program arguments 추가

Program arguments 부분에 원하는 argument를 넣고 apply

public class Test {
public static void main(String[] args) {
for(String str : args) {
System.out.println(str);
}
}
}
출력 결과
item1
item2
item3
+실전 활용 예시
배치 프로그램 안에 여러 개의 스케줄러 메서드가 포함되어 있을 때, 그중 하나의 특정 스케줄러 메서드만 별도로 디버깅 하거나 테스트하고 싶었다.
@Component
@Slf4j
public class MyTaskScheduler {
@Scheduled(cron = "0 0 12 * * ?")
public void scheduledMethod() {
log.info("Scheduled Method Running...");
// 작업 수행 로직
}
public boolean testSchedulerMethod() {
log.info("Test Scheduler Method Running...");
// 테스트 로직
return true;
}
}
@SpringBootApplication
@EnableScheduling
public class BatchApplication implements CommandLineRunner {
private final MyTaskScheduler myTaskScheduler;
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info("Program Arguments received: " + args[0]);
String task = args[0];
if ("testScheduler".equals(task)) {
boolean result = myTaskScheduler.testSchedulerMethod();
if (result) log.info("Scheduler test: SUCCESS!");
else log.info("Scheduler test: FAIL!");
System.exit(0); // 애플리케이션 종료
}
}
}
testScheduler를 입력하면 애플리케이션 실행 시 args[0]으로 testScheduler 값이 전달된다.출력 결과
Program Arguments received: testScheduler
Test Scheduler Method Running...
Scheduler test: SUCCESS!
많은 분들이 Program Arguments와 VM Options를 혼동하기도 하는데,
간단히 구분하자면:
Program Arguments
애플리케이션의 내부 로직을 제어하는 데 사용되며,
main(String[] args)로 전달됨
- 예:
"testScheduler"
VM Options
자바 클래스에서 사용할 수 있는 시스템 속성 정의
- 예: Dusername=jeondui