2013-10-29 2 views
0

다음과 같은 문제가 있습니다 :각 테스트 실행 후 DB 재설정

DB가 많은 테스트 데이터로 미리 채워져 있습니다. 각 테스트가 끝나면 테스트 절차의 변경 사항을 버리기를 원합니다. 이미 임베디드 H2 DB로이 작업을 시도했습니다. DB 파일을 원래 파일로 덮어 쓰면 문제가 해결 될 것입니다. 그러나 또 다른 문제가 나타났습니다. H2는 서버로 실행하지 않고 멀티 스레딩을 지원하지 않습니다.

그 후 저는 HSQLDB를 보았습니다. 정상적으로 파일 DB (메모리가 아닌)로 사용된다면 DB의 내용을 메모리에로드하고 잠시 후에 변경된 내용을 디스크에 유지합니다.

파일 DB를 메모리로 읽어서 거기에서 사용하고 끝에 변경 사항을 버릴 수 있습니까? 이것은 완벽 할 것입니다. 롤백을 사용하는 솔루션도 훌륭합니다.

감사합니다, 다니엘 H2 데이터베이스의 경우

+0

왜 멀티 스레딩 부족으로 문제가 해결됩니까? – acfrancis

+0

응용 프로그램이 크게 멀티 스레딩에 의존하기 때문에 응용 프로그램이 없으면 작동하지 않습니다. 때로는 20 개 이상의 스레드가 동시에 DB에 액세스하고 있습니다. 테스트에서 느리게 작동한다면 여전히 괜찮은 편이지만 작동해야합니다. –

+0

네가 선택한 DB 솔루션에 관계없이 테스트가 끝날 때 DB가 "복원"되면 모든 스레드가 기다려야 할 것입니다. 맞습니까? – acfrancis

답변

1

:

  • append ;INIT=runscript from '~/create.sql' to the database URL, 스크립트에서 데이터베이스를로드합니다. 클래스 경로의 리소스에서 스크립트를로드 할 수도 있습니다. 이 경우 으로 ~/create.sql을 대체하십시오. 변경 사항에 관심이 없다면 메모리 데이터베이스 (jdbc:h2:mem:test;...)와 함께 사용할 수 있습니다.

  • H2 데이터베이스를 멀티 스레드 모드에서 사용하려면 append ;MULTI_THREADED=1 to the database URL. 이것은 모든 모드 (메모리, 내장, 클라이언트/서버)에 적용됩니다.

+0

토마스에게 감사 드려요, 내일 시험에 응합니다. –

+0

멀티 스레드 모드의 매력처럼 작동합니다. –

1

HSQLDB에는이 용도로 사용할 수있는 옵션이 있습니다.

테스트 데이터베이스를 만든 후 SHUTDOWN을 수행하십시오. .properties 및 .script 파일을 갖게됩니다.

files_readonly=true 

가 그런 다음 테스트를 위해이 데이터베이스를 사용하십시오 .properties 파일에서이 줄을 추가합니다. 앱을 종료 할 때 롤백이나 특별한 조치가 필요하지 않습니다.

또는

;files_readonly=true이 가이드의 장 참조, 테스트 응용 프로그램의 연결 URL에 이것을 추가 : 멀티 스레드 애플리케이션 테스트를 위해

http://www.hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_db_file_mem

를, 데이터베이스 트랜잭션 모델은 일반적으로 MVCC입니다 , 당신은 원래 데이터베이스에서 설정합니다.

+0

답변 해 주셔서 감사합니다. 우리가 H2를 선호하고 Thomas가 제공 한 대답으로 정말 잘 작동하기 때문에 나는 그것을 시험하지 않았다. –

관련 문제