Datasource에 연결하기

웰시고기·2021년 2월 17일
0

Data Source vs DataSource

  • Data Source : 데이터베이스
  • Datasource : 데이터베이스와 물리적, 논리적으로 연결을 관리하는 Java클래스

Spring에서 Datasource 설정

  • application.properties에서 다음과 같이 설정할 수 있다.
    - 만일 해당 설정이 없다면 기본적으로 내장 메모리인 h2에 연결된다.
spring.datasource.url=jdbc:mysql://localhost:3306/exampledb
spring.datasource.username=sa
spring.datasource.password=sa1234
  • 다음과 같이 클래스를 만들어 DataSourceBuilder를 통해 생성할 수도 있다.
@Configuration
public class DatasourceConfig {

   @Bean
   @ConfigurationProperties("foo.datasource")
   public DataSource getDatasource() {
       DataSourceBuilder dsb = DataSourceBuilder.create();
       dsb.password(securePasswordService());
       return dsb.build();
   }
  • 여기서 ConfigurationProperties는 인자의 값을 통해 application.properties에서 값을 가져온다.

Spring에서 datasource 초기화

  • spring.datasource.initialization-mode의 값을 변경하여 설정할 수 있다.
    - Embedded : 기본값이며 H2와 같은 내장 데이터베이스에서 초기화를한다.
    • Always : 항상 초기화함
    • Never : 초기화하지 않음
  • spring.jpa.hibernate.ddl-auto를 통해 초기화 방법을 설정할 수 있다.
    - create : 정의된 Entity의 모든 테이블을 drop하고 새로 생성
    - create-drop : 테이블을 생성하고 종료될 때 drop
    • update : 현재의 Entity의 테이블에 맞춰 이전의 테이블을 옮김
    • validate : 테이블이나 열이 없으면 예외 처리함
    • none : 테이블을 초기화하지 않음
  • spring.jpa.show-sql을 통해 자동으로 생성되는 SQL문을 콘솔에 출력할 수 있다.
  • spring.jpa.properties.hibernate.format_sql을 통해 indent를 추가해 보기 쉽게 SQL문을 볼 수 있다.

Datasource에서 Unit test

  • @DataJpaTest : application.properties 파일의 설정 없이 테스트할 수 있다. 자동으로 내장메모리를 사용할 수 있다면 자동으로 설정하고 사용한다. Spring Data JPA Repository와 Entity만 실행하고, Service나 Controller는 실행되지 않는다.
  • TestEntityManager : 테스트 데이터에 EntityManager를 사용하기 위해 존재한다. @DataJpaTest에서 사용가능하다.
  • @AutoConfigureTestDatabase : Spring의 자동으로 테스트할 때 기존의 데이터베이스를 대체하는 설정을 변경한다. 아래 코드는 @DataJpaTests에서 내장메모리를 사용하는 것을 막는다.
@AutoConfigureTestDatabase(replace=Replace.NONE)

0개의 댓글