스프링 웹 개발 중에 매번 데이터를 삽입하고 삭제하는것은 매우 번거러운 일입니다.
저는 CommandLineRunner 라는 인터페이스를 사용해서 미리 데이터를 넣어 보겠습니다.
데이터베이스에 테이블 Entity입니다.
@Entity
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Account {
@Id
@GeneratedValue
private Long id;
private String email;
private String password;
private String nickName;
}
데이터베이스에 엑세스 하기 위한 Repository입니다.
public interface AccountRepository extends JpaRepository<Account, Long> {
}
DB에 더미 데이터 넣어주는 부분입니다.
@Configuration
@RequiredArgsConstructor
public class DumpDataConfiguration implements CommandLineRunner{
private final AccountRepository accountRepository;
@Override
public void run(String... args) throws Exception {
if (!accountRepository.findById(1L).isPresent()) {
Account account1 = accountRepository.save(Account.builder()
.email("admin")
.nickName("admin")
.password("$2a$10$YWPfzuLkN3WheGyxa/w8Ju7LV433YY4afTyc/4obk8.VAO.9b7EFS")
.build());
}
}
}
CommandLineRunner
다음과 같이 CommandLineRunner 인터페이스를 구현한 클래스를 Bean으로 등록시켜주는 어노테이션을 선언해두면 컴포넌트 스캔이되고 구동 시점에 run 메소드의 코드가 실행됩니다.
또한 이렇게 함수 형태로 사용 할 수도 있습니다.
@Configuration
public class DemoAppConfiguration {
@Bean
public CommandLineRunner demo(AccountRepository accountRepository) {
return args -> {
if (!accountRepository.findById(1L).isPresent()) {
Account account1 = accountRepository.save(Account.builder()
.email("admin")
.nickName("admin")
.password("$2a$10$YWPfzuLkN3WheGyxa/w8Ju7LV433YY4afTyc/4obk8.VAO.9b7EFS")
.build());
}
}
}
제대로 값이 들어간 것을 확인 할 수 있습니다.