스프링 부팅 데이터 소스 커밋 문제
내 애플리케이션은 Spring-Boot 1.4.1.REASE를 사용하며 내 데이터 소스의 구성은 다음과 같습니다.
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를 준비할 수 있는 셋업 로직이 있는 케이스가 소수에 불과하기 때문에 문제가 발생하는 경우는 거의 없습니다.Oracle DB에 대한 구성 외에는 없습니다. 구성은 다음과 같습니다.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);
}
}
위의 경우, 예를 들어 마지막 통합 사례인 경우, 마지막 SQL을 커밋하지 못하는 문제@Sql
주석, 즉SetupZ.sql
하지만 데이터가 완전히 없어진 것은 아니고, 기본 키를 삽입하고,columnA
또는columnB
마치 여기서 뭔가가 정말 잘못된 것 같습니다.
일부 구성의 존재 또는 부재가 이 문제를 야기합니까?그렇지 않다면 그 이유는 무엇일까요?
작업할 수 있습니다.@Transactional
테스트. 이렇게 하면 테스트를 실행하여 결과를 확인하고 BD를 테스트 전 상태로 롤백할 수 있습니다.
참조 http://docs.spring.io/spring/docs/4.3.11.RELEASE/spring-framework-reference/htmlsingle#testcontext-tx-enabling-transactions
당신은 JPA를 지속적으로 사용하려고 합니다.다음 설정을 사용할 수 있습니다.
spring.jpa.show-sql=true
그러면 무엇이 잘못되었는지 알 수 있습니다.
실제 데이터베이스 대신 테스트 클래스를 위해 안녕하세요. DB2, derby, h2와 같은 In-Memory 데이터베이스를 사용할 수 있습니다. 이것은 문제에 대한 해결책을 제공합니다.
코드 예제의 경우 아래 URL(Stack overflow link) Spring data jpa repository In-memory 테스트 사례를 찾을 수 있습니다.
이는 Junit 및 Spring/Hibernate 내에서 충돌하는 라이브러리 때문이었습니다.최신 Spring & Junit 버전으로 업데이트하고 Java8로 업데이트하면 문제가 사라집니다.
언급URL : https://stackoverflow.com/questions/42573443/spring-boot-datasource-commit-trouble
'programing' 카테고리의 다른 글
Angular 4/5 HttpClient: 문자열 형식의 인수를 'body'에 할당할 수 없습니다. (0) | 2023.06.29 |
---|---|
to_char 함수를 사용하여 문자열로 구문 분석할 때 Oracle에서 일 및 월 값에서 선행 0을 제거하는 방법은 무엇입니까? (0) | 2023.06.29 |
Firebase 콘솔 웹에서 언어 기본값을 변경하는 방법은 무엇입니까? (0) | 2023.06.29 |
MongoDB 복합 키 (0) | 2023.06.29 |
winapi: 프로세스를 생성하지만 프로세스의 창을 숨기시겠습니까? (0) | 2023.06.29 |