programing

스프링 부트@DataJpaTest H2 임베디드 데이터베이스 생성 스키마

muds 2023. 4. 1. 10:07
반응형

스프링 부트@DataJpaTest H2 임베디드 데이터베이스 생성 스키마

데이터 레이어에 특정 스키마에 저장된 엔티티가 몇 개 있습니다.예를 들어 다음과 같습니다.

@Entity
@Table(name = "FOO", schema = "DUMMY")
public class Foo {}

데이터 계층의 통합 테스트를 위해 H2 내장형 데이터베이스를 설정하려고 합니다.사용하고 있다@DataJpaTestH2 임베디드 데이터베이스를 자동으로 구성하기 위한 테스트용 주석입니다.그러나 스키마 때문에 테이블 생성이 실패합니다.DUMMYDB 초기화 시 생성되지 않습니다.

테스트 케이스에서 테이블을 작성하기 전에 스키마를 작성하는 방법에 대한 아이디어가 있습니까?

@Sql(statements="CREATE SCHEMA IF NOT EXISTES DUMI")을 사용하려고 했지만 실패했습니다.

또, 저는 세팅하려고 노력했습니다.spring.datasource.url = jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY내 안에서test.properties와 함께 철하다TestPropertySource("classpath:test.properties")하지만 그것도 효과가 없었습니다.

같은 문제가 있어서 schema.sql(리소스 폴더에)을 생성하여 해결했습니다.

CREATE SCHEMA IF NOT EXISTS <yourschema>

여기서 문서를 찾을 수 있지만 실제 예가 없기 때문에 매우 복잡합니다.경고: 이 스크립트는 일반(테스트가 아님) 환경에서도 실행됩니다.

필수는 아니지만 테스트 범위에만 h2 종속성을 추가하는 것이 좋습니다.

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>test</scope>
</dependency>

이 주석을 찾고 계신 것 같습니다.

@AutoConfigureTestDatabase(replace=Replace).없음)

예:

@DataJpaTest
@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
class UserRepoTest {...}

몇 시간 동안 고군분투한 끝에 해결 방법을 찾았습니다.

정의할 수 있습니다.spring.jpa.properties.hibernate.default_schema = DUMMY당신의 안에서application.properties.

그리고 세팅.spring.jpa.properties.hibernate.default_schema =당신의 안에서test.properties와 함께 사용합니다.@TestPropertySource("classpath:test.properties")

따라서 스키마 DUMMY는 생성되지 않고 기본 스키마에서 엔티티가 생성됩니다.

저 같은 경우에는schema.sql아래test/resources효과가 없었다.

의 다음 설정test/resources/application.yml파일이 동작했습니다.

spring:
  datasource:
    username: sa
    password: sa
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:usrmgmt;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY;
  liquibase:
    change-log: classpath:db/changelog/db.changelog-master.xml

위의 구성에서는 다음 추가 구성을 제공했습니다.

  1. INIT=CREATE SCHEMA IF NOT EXISTS DUMMY기존 DB URL로 확장합니다.이것이 없을 때, 예외에 직면했다.Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "DUMMY" not found;.
  2. spring.liquibase.change-log소유물.이것이 없을 때, 예외에 직면했다.Caused by: liquibase.exception.ChangeLogParseException: classpath:/db/changelog/db.changelog-master.yaml does not exist.

언급URL : https://stackoverflow.com/questions/39037855/spring-boot-datajpatest-h2-embedded-database-create-schema

반응형