[Spring] application.yml 정리

APRIL 28, 2022

■ JPA 관련 필드

■ spring.jpa.database-platform

  • JPA 데이터베이스 플랫폼 지정

■ spring.jpa.open-in-view

  • OSIV(Open Session In View)는 웹 요청이 완료될 때까지 동일한 EntityManager를 갖도록 해줍니다.
  • 스프링부트에서 OSIV가 기본값으로 true인데, 성능과 확장상 면에서 안좋다고 해서 false로 설정을 껏습니다.

■ spring.jpa.show-sql

  • 콘솔에 JPA 실행 쿼리를 출력합니다.

■ spring.jpa.hibernate.format_sql

  • 콘솔에 출력되는 JPA 실행 쿼리를 가독성있게 표현합니다.

■ spring.jpa.hibernate.ddl_auto

  • 데이터베이스 초기화 전략을 설정
none 아무것도 실행하지 않음
create SessionFactory가 시작될 때 기존테이블을 삭제 후 다시 생성
create-drop create와 같으나 SessionFactory가 종료될 때 drop을 실행
update 변경된 스키마만 반영(제거는 하지 않음)
validate 엔티티와 테이블이 정상적으로 매핑되었는지만 확인(다르면 예외 발생)

■ DB 관련 필드

■ logging.level.org.hibernate.type.descriptor.sql

  • SQL에서 물음표로 표기된 부분( bind parameter )을 로그로 출력해서 확인할 수 있습니다.

■ spring.datasource.initialization-mode

  • alwasy로 설정해야 외장 DB 초기화 가능
  • 설정하지 않으면 기본으로 never로 설정: Embedded DB 사용 -> ex. HSQL, H2, Derby

■ spring.datasource.data

  • sql 파일 경로를 지정하면 지정된 파일의 스크립트를 실행
  • ex. spring.datasource.data=classpath:member.sql, book.sql
  • 기본값은 classpath:schema.sql, classpath:data.sql
  • DB 종류에 따라 다른 스크립트를 사용하려면 spring.datasource.platform을 해당 DB종류(ex. mysql, posgresql)로 설정하고 schema-mysql.sql, data-mysql.sql과 같이 사용

■ 예제 ■ mysql 기준

server:
  shutdown: graceful

spring:
  main:
    banner-mode: off
  datasource:
    url: jdbc:mysql://{host}:{port}/{db}?useSSL=false&authcommit=false
    username: {uername}
    password: {password}
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: mysql
    open-in-view: false
    show-sql: false
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        format_sql: true
  redis:
    host: {host}
    port: {port}
    database: 0

logging:
  level:
    root: DEBUG

■ h2 기준

spring:
  h2:
    console:
      enabled: true
      path: /test
  datasource:
    jdbc-url: jdbc:h2:mem:default
    driver-class-name: org.h2.Driver
    username: sa
    password: sa
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    database: h2
    hibernate:
      ddl-auto: create-drop
    generate-ddl: true
    defer-datasource-initialization: true

작업 기록 블로그