SMALL
Spring Boot Appliction이 실행되는 시점에 특정 코드를 추가하고 싶은 경우가 존재할 것이다.
이런 경우에 어떻게 해야하는지 알아보도록 하자.
CommandLineRunner
@Component
public class InitCommand implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// do somethings ..
}
}
ApplicationRunner
@Component
public class InitAppliation implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
// do somethings ..
}
}
차이점
두 interface 모두 run이라는 메서드를 제공하고, 해당 메서드에서 원하는 로직을 작성하면 된다.
그렇다면 이 둘의 차이점은 무엇일까?
차이점으로는 메서드에 arguments이다.
CommandLineRunner는 String Array를 Application Runner는 ApplicationArguments를 인자로 받는다.
그렇 각각의 값들을 어떻게 세팅하고 어떻게 꺼내 쓰는지 알아보도록 하자.
java -jar SpringApp.jar agrs1 args2 --name=junsu --type=child
위와 같은 형태로 Application을 실행시켰다고 하면
CommandLineRunner에서는 String Array로 해당 값들을 아래와 같이 받을 수 있다.
@Override
public void run(String... args) throws Exception {
System.out.println("#######################################");
for (String str : args) {
System.out.println(str);
}
}
ApplicationRunner에서는 ApplicationArguments의 메서드들을 이용해서 값들을 가져올 수 있다.
NonOptionArgs와 Option(Name, Value)로 나누어서 값을 가져올 수 있게 되어있다.
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("*******************************************");
args.getNonOptionArgs().forEach(str -> System.out.println(str));
args.getOptionNames().forEach(str -> {
System.out.print(str + " -- ");
System.out.println(args.getOptionValues(str).get(0));
});
System.out.println(args.getOptionValues("name"));
}
LIST
'Spring > etc' 카테고리의 다른 글
[Spring] @PreAuthorize, @PostAuthorize에서 Custom Security Expression 사용하기 (0) | 2021.11.27 |
---|---|
[Spring] Spring Security Annotation (@PreAuthorize, @PostAuthorize, @Secure) (0) | 2021.11.24 |
[Spring] @WebMvcTest 작성 시 Spring Security 유의사항 (0) | 2021.09.29 |
[Spring] Controller Layer Test 코드 작성 (+예시) (0) | 2021.09.09 |
[Spring] Interceptor란 (+사용 예제) (0) | 2021.09.05 |