2017-03-03 1 views
23

내 응용 프로그램은 스프링 부트 1.4.1.RELEASE를 사용하고 내 데이터 소스의 구성은 다음과 같습니다.스프링 부트 데이터 소스 커밋 문제

spring: 
    datasource: 
    url: *** 
    username: *** 
    password: *** 
    driver-class-name: oracle.jdbc.driver.OracleDriver 
    initial-size: 1 
    max-active: 100 
    max-idle: 30 
    min-idle: 1 
    max-wait: 0 
    pool-prepared-statements: true 
    max-open-prepared-statements: 3 

문제는 마지막 설정 SQL을 저지하는 데 실패 내 통합 테스트의 마지막 경우 그것이 @Sql 설치 로직이 포함 된 경우이다. 문제의 재발행과 DB를 준비하는 설정 논리가있는 경우가 거의 없습니다. 구성은 없지만 OracleDB 용 구성은 ConfigClass입니다.

@SpringBootTest(classes = ConfigClass.class) 
public class EtcTest { 

    @After 
    public void teardown() { 
     // teardwon X, Y, & Z 
    } 

    @Test 
    @Sql("setupX.sql") 
    @Sql("setupY.sql") 
    @Sql("setupZ.sql") 
    public void get_fromDb() { 
     List<Etc> list = buildExpectedList(); 
     Obj expected = buildExpected(); 
     Obj actual = getCallToAPI(); 

     assertThat(rs.getX()).isEqualTo(expected.getX()); 
     assertThat(rs.getY()).isEqualTo(expected.getY()); 
     assertThat(rs.getZ()).containsAll(list); 
    } 
} 

는 마지막으로 통합하는 경우라면 위의 경우에 예를 들어, 문제는, 그것은 즉 SetupZ.sql@Sql 주석의 마지막 SQL을 커밋 실패,하지만 데이터가 완전히 누락 된 것이 아니라,을 기본 키를 삽입하고 경우에 따라 columnA 또는 columnB을 삽입합니다. 여기서 실제로 잘못된 것입니다.

일부 구성의 존재 여부에 따라이 문제가 발생합니까? 이유가 무엇이 아닌가?

+4

, 당신은 읽어야 참조 [릴리스 노트 (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4 -Release-Notes), 특히 [이 섹션] (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes#datasource-binding)을 참조하십시오. 모든 연결 풀 관련 설정이 전용 네임 스페이스로 이동했습니다. 구성을 검토하십시오. –

+0

@StephaneNicoll 동일한 버전을 사용했지만, 변경 사항은 junit의 주석 전후에 주석이 달린 일부 설정 및 분해 방법을 추가 한 것뿐이었습니다. 어떻게 든 빌드가 non-db 관련 테스트를 마지막에 넣었을 때 마지막 빌드를 성공적으로 수행했습니다. 이제 마지막 case와 동일한 non-commit 문제가 다시 발생합니다. –

+2

Oracle 9i 이후에는'oracle.jdbc.driver.OracleDriver' 대신 Oracle oracle.jdbc.driver.OracleDriver를 사용해야합니다. –

답변

1

안녕하세요, 실제 데이터베이스가 아닌 테스트 클래스의 경우 DB2, derby 및 h2와 같은 메모리 내장 데이터베이스를 사용할 수 있습니다. 그것은 당신의 문제 해결을위한 솔루션을 제공합니다.

코드 예를 들어, 당신은 당신이 지속을 위해 JPA를 사용하려고 할 URL Spring data jpa repository In-memory test case

1

를 검색 할 수 있습니다. 다음 설정을 사용할 수 있습니다.

spring.jpa.show-sql=true 

그러면 잘못된 것을 확인할 수 있습니다.

관련 문제