2017-12-19 44 views
0

schema.sql을 사용하여 테이블을 생성하기위한 스크립트로 스프링 부트 & H2를 테스트 할 수 없습니다. 나는 테이블이 schema.sql을 사용하여 생성 될 것으로 예상스프링 부트 2 - H2 데이터베이스 - @SpringBootTest - org.h2.jdbc.JdbcSQLException에 실패 함 : 테이블이 이미 있습니다.

spring.datasource.driver-class-name=org.h2.Driver 
spring.datasource.initialization-mode=always 
spring.datasource.username=sa 
spring.datasource.password= 
spring.datasource.platform=h2 
spring.datasource.url=jdbc:h2:mem:city;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect 
spring.jpa.generate-ddl=false 
spring.jpa.hibernate.ddl-auto=update 
spring.jpa.show-sql=true 

과 :

그럼, 무슨 일이 일어나고 것은 나는 다음과 같은 속성을 설정 한 것입니다. 응용 프로그램을 실행할 때 잘 작동 gradle bootRun.

예외가 제기 :

Caused by: org.h2.jdbc.JdbcSQLException: Table "CITY" already exists;    
SQL statement: 
CREATE TABLE city (id BIGINT NOT NULL, country VARCHAR(255) NOT NULL, map VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, state VARCHAR(2555) NOT NULL, PRIMARY KEY (id)) [42101-196] 
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
at org.h2.message.DbException.get(DbException.java:179) 
at org.h2.message.DbException.get(DbException.java:155) 
at org.h2.command.ddl.CreateTable.update(CreateTable.java:117) 
at org.h2.command.CommandContainer.update(CommandContainer.java:101) 
at org.h2.command.Command.executeUpdate(Command.java:260) 
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:192) 
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:164) 
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) 
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) 
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:471) 
... 105 more 
내가 Gradle을 테스트, 저장소 통과에 대한 내 테스트를 사용하여 테스트를 수행하지만, 그러나, 내 서비스에 대한 하나는 테이블이 이미 존재하는 경우에 테이블을 생성하려고한다는 실패

코드가 설정되어 시나리오를 다시 작성할 준비가되었습니다. README에 모든 정보가 있습니다 -> https://github.com/tekpartner/learn-spring-boot-data-jpa-h2

답변

1

테스트가 개별적으로 실행되면 통과합니다. 문제는 같은 데이터베이스에 대해 두 번 실행되는 schema.sql 때문이라고 생각합니다. 테이블이 이미 존재하므로 두 번째 실패합니다.

해결 방법으로 spring.datasource.continue-on-error=trueapplication.properties에 설정할 수 있습니다.

또 다른 옵션은 적절한 경우 고유 한 내장 데이터베이스가 각 테스트에 사용되도록 @AutoConfigureTestDatabase 주석을 추가하는 것입니다.

+0

@AutoConfigureTestDatabase를 사용하여 해결했습니다. 시간을내어 주셔서 감사합니다. –