스프링 부트@DataJpaTest H2 임베디드 데이터베이스 생성 스키마
데이터 레이어에 특정 스키마에 저장된 엔티티가 몇 개 있습니다.예를 들어 다음과 같습니다.
@Entity
@Table(name = "FOO", schema = "DUMMY")
public class Foo {}
데이터 계층의 통합 테스트를 위해 H2 내장형 데이터베이스를 설정하려고 합니다.사용하고 있다@DataJpaTest
H2 임베디드 데이터베이스를 자동으로 구성하기 위한 테스트용 주석입니다.그러나 스키마 때문에 테이블 생성이 실패합니다.DUMMY
DB 초기화 시 생성되지 않습니다.
테스트 케이스에서 테이블을 작성하기 전에 스키마를 작성하는 방법에 대한 아이디어가 있습니까?
@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
위의 구성에서는 다음 추가 구성을 제공했습니다.
INIT=CREATE SCHEMA IF NOT EXISTS DUMMY
기존 DB URL로 확장합니다.이것이 없을 때, 예외에 직면했다.Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "DUMMY" not found;
.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
'programing' 카테고리의 다른 글
동적으로 로드된 JavaScript 블록을 실행하려면 어떻게 해야 합니까? (0) | 2023.04.01 |
---|---|
access-token을 react.js의 어디에 저장합니까? (0) | 2023.04.01 |
angular-loader.js의 용도는 무엇입니까? (0) | 2023.04.01 |
스프링 부트 및 MongoDB 접속 상세 설정 방법 (0) | 2023.04.01 |
ui-router 및 Angularjs를 사용하여 TOP로 자동 스크롤 (0) | 2023.04.01 |