Skip to content

Latest commit

 

History

History
75 lines (51 loc) · 2.47 KB

02.command_line_runner.md

File metadata and controls

75 lines (51 loc) · 2.47 KB

CommandLineRunner 사용하기

소개

CommandLineRunner란 Spring에서 지원하는 인터페이스로, Application Context 생성이 종료된 후에 해당 메소드가 자동으로 호출된다.

주로 초기화와 같이 테스트용으로 간단한 작업을 할때 사용된다.

Spring Bean에 등록해야지 작동한다.

참고로 String... args와 같은 매개변수를 갖는데, Application을 실행시킬 때 넣어준 인자들이 들어가게 된다.


사용

우선 CommandLineRunner를 Implements 해야 사용할 수 있다.

@RequiredArgsConstructor
@Component
public class InitMovies implements CommandLineRunner {

    @Override
    public void run(String... args) {
    }
    
}

위와같이 간단한 기본 세팅을 해준다.

그리고 난 후에 Movie Document를 조작하기 위해서 MovieRepository를 주입받을 수 있도록 한다.

@RequiredArgsConstructor
@Component
public class InitMovies implements CommandLineRunner {

    private final MovieRepository movieRepository;

    @Override
    public void run(String... args) {
    }
}

그리고 만약 EmbeddedMongoDB를 사용하고 있다면 알아서 매 실행마다 초기화되기 때문에 필요 없지만 docker 등으로 직접 돌리고 있을 경우를 대비해서 Movie Document를 따로 초기화 한다.

그리고 초기값을 넣어준다.

@RequiredArgsConstructor
@Component
public class InitMovies implements CommandLineRunner {

    private final MovieRepository movieRepository;

    @Override
    public void run(String... args) {
        movieRepository.deleteAll()
                .thenMany(Flux.just("movie1", "movie2", "movie3", "movie4", "movie5")
                        .map(title -> Movie.builder().title(title).build())
                        .flatMap(movieRepository::save)
                ).subscribe(null, null, () ->
                movieRepository.findAll().subscribe(System.out::println));
    }
}

위와 같이 Flux에 Movie의 제목을 위한 String들을 주고, title을 기반으로 Movie를 build하고, 각각의 movie들을 save해 준다.

그 후에는 .subscribe(null, null, () -> movieRepository.findAll().subscribe(System.out::println));가 눈에 띄는데, subscribe()의 매개변수에는 여러가지가 있는데,

그 중 매 data마다 실행할 코드, 에러 발생 시 실행할 코드는 무시하고 완료 시 실행할 코드각각의 요소 출력을 넣어준 것이다.