programing

@DataJpaTest용 Spring Boot 1.4.1의 내장 H2 DB에 mode=syslog를 추가하는 방법은 무엇입니까?

magicmemo 2023. 3. 22. 20:57
반응형

@DataJpaTest용 Spring Boot 1.4.1의 내장 H2 DB에 mode=syslog를 추가하는 방법은 무엇입니까?

junit 테스트를 실행할 때 schema.sql 파일을 사용하여 schema.sql 스키마를 만드는 데 문제가 있습니다.이 스키마에는 mysql 고유의 표현이 포함되어 있습니다.를 추가해야 합니다.mode=mysqlH2 URL로 이동합니다.

예를 들어 다음과 같습니다.jdbc:h2:mem:testd;MODE=MYSQL

그러나 Spring boot에서는 enum org.springframework.boot.autoconfigure.jdbc에 정의된 URL이 자동으로 사용됩니다.Embedded Database Connection과 URL

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE.

나는 이것을 작동시키기 위해 유사한 접근법을 시도했지만, 봄은 그것을 취하지 않습니다.spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQLtest-application.properties를 참조해 주세요.test-application.properties의 다른 설정은 모두 정상적으로 읽혔습니다.

spring/hibernate가 스키마(schema.sql 파일 없음)를 작성하게 하면 엔티티에 javax.persistence 주석이 있는 스키마는 정상적으로 동작합니다.

모드를 추가하는 간단한 방법이 있나요?

세트

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL

application-test.properties에 추가되어 있습니다.

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")

시험반에서.

나도 같은 문제를 겪고 있었어테스트 실행 시 URL이 선택되지 않습니다.스크립트를 관리하기 위해 플라이웨이를 사용하고 있습니다.저는 이 몇 가지 단계를 따름으로써 이 모든 것을 함께 할 수 있었습니다.

작성했다V1_init.sqlsrc/test/db/db/db/db로 스크립트가 실행되도록 합니다.

SET MODE MYSQL; /* another h2 way to set mode */

CREATE SCHEMA IF NOT EXISTS "public"; /* required due to issue with flyway --> https://stackoverflow.com/a/19115417/1224584*/

갱신필application-test.yaml스키마 이름 public을 포함합니다.

flyway:
  schemas: public

테스트에서 프로파일을 지정했는지 확인합니다.@ActiveProfiles("test")

이 기능을 수행하기 위해 유사한 방법을 시도했지만 스프링이 test-application.properties에서 spring.datasource.url=jdbc:h2:mem:testdb;MODE=Spring을 가져오지 않습니다.

기존 매개 변수를 다시 쓰는 대신 이 매개 변수를 추가하려고 시도했습니까?

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL

test-application.properties의 다른 설정은 모두 정상적으로 읽혔습니다.

나는 그 파일에 이름을 붙여야 한다고 생각했다.application-test.properties.

다음 구성으로 실행할 수 있었습니다.

# for integration tests use H2 in MySQL mode
spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_LOWER=TRUE;MODE=MySQL;
spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect

여기서의 주된 트릭은 Hibernate가 MariaDB 방언용 SQL 스크립트를 생성하도록 강제하는 것입니다.그렇지 않으면 Hibernate는 이미 MySQL과 같은 명령어를 기다리고 있을 때 H2 사투리를 사용하려고 하기 때문입니다.

또한 나는 좀 더 신선하게 사용하려고 노력했다.MariaDB103Dialect마리아DB 10.3을 클릭합니다.

설정해야 합니다.MYSQLh2 모드 및 임베디드 데이터베이스의 데이터 소스 URL 치환을 비활성화합니다.

application-test.yaml

spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false;MODE=MYSQL  
  test:
    database:
      replace: NONE

언급URL : https://stackoverflow.com/questions/42364935/how-to-add-the-mode-mysql-to-embedded-h2-db-in-spring-boot-1-4-1-for-datajpates

반응형