[SpringBoot] 실행 전 데이터 세팅 방법, CommandLineRunner

2023. 3. 20. 18:55spring

로직을 테스트 해보려고 할 때 매번 데이터를 넣는건 속도도 느려지고 상당히 귀찮다.

이 방법으로 데이터를 미리 세팅해 놓을 수 있다.

 

[예시 1]

@Configuration
@Profile({"dev", "test"})
// NotProd : 개발환경이 이거나, 테스트환경일 때만 실행
public class NotProd {
    @Bean
    public CommandLineRunner initData(MemberService memberService, ArticleService articleService) {
        return args -> {
            // 이 부분은 스프링부트 앱이 실행되고, 본격적으로 작동하기 전에 실행된다.
            memberService.join("user1", "1234");
            memberService.join("abc", "12345");
            memberService.join("test", "12346");
            memberService.join("love", "12347");
            memberService.join("like", "12348");
            memberService.join("giving", "12349");
            memberService.join("thanks", "123410");
            memberService.join("hello", "123411");
            memberService.join("good", "123412");
            memberService.join("peace", "123413");

            articleService.write("제목1", "내용1");
            articleService.write("제목2", "내용2");
        };
    }
}

 

[예시2]

@Component
@RequiredArgsConstructor
public class BaseData implements CommandLineRunner {
    private final QuestionRepository questionRepository;
    private final AnswerRepository answerRepository;

    @Override
    public void run(String... args) throws Exception {
        QuestionEntity question1 = QuestionEntity
                .builder()
                .subject("test1")
                .content("content1")
                .build();
        questionRepository.save(question1);

        QuestionEntity question2 = QuestionEntity
                .builder()
                .subject("test2")
                .content("content2")
                .build();
        questionRepository.save(question2);
        QuestionEntity question3 = QuestionEntity
                .builder()
                .subject("이름")
                .content("이름이뭔가요?")
                .build();
        questionRepository.save(question3);

        AnswerEntity answer = AnswerEntity
                .builder()
                .question(question3)
                .content("홍길동입니다.")
                .build();
        AnswerEntity savedAnswerEntity = answerRepository.save(answer);

    }