spring-boot - Spring Boot 2.0.4 - H2 数据库 - @SpringBootTest - 因 : org. h2.jdbc.JdbcSQLException 导致失败:未找到架构 "classpath:db/schema.sql"

标签 spring-boot spring-data-jpa h2

我使用 Spring Boot 2.0.4 构建了一个应用程序并与 JPA 集成。

现在我想使用 h2 数据库运行一些测试,但无法使用 h2 执行 Spring Boot 测试。

异常(exception)情况如下所示:

Caused by: org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.h2.jdbc.JdbcSQLException: Schema "classpath:db/schema.sql" not found [90079-197]
    at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:58)
    at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.runScripts(DataSourceInitializer.java:210)
    at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.createSchema(DataSourceInitializer.java:104)
    at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.afterPropertiesSet(DataSourceInitializerInvoker.java:64)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695)
    ... 74 more
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.h2.jdbc.JdbcSQLException: Schema "classpath:db/schema.sql" not found [90079-197]
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81)
    at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:46)
    ... 79 more
Caused by: org.h2.jdbc.JdbcSQLException: Schema "classpath:db/schema.sql" not found [90079-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.engine.Database.getSchema(Database.java:1808)
    at org.h2.engine.Session.setCurrentSchemaName(Session.java:1317)
    at org.h2.jdbc.JdbcConnection.setSchema(JdbcConnection.java:1989)
    at com.zaxxer.hikari.pool.PoolBase.setupConnection(PoolBase.java:423)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:370)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:194)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:460)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:534)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
    at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:151)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:115)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:78)
    ... 80 more

我的 application-test.properties 是:

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.jdbc-url=jdbc:h2:mem:test
spring.datasource.schema=classpath:db/schema.sql
spring.datasource.data=classpath:db/data.sql
spring.datasource.initialization-mode=always


spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
logging.level.org.hibernate.SQL=debug
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

这些异常发生在我执行 schema.sql 时,但 h2 希望在 spring.datasource.schema 中指定的名为“classpath:schema.sql”的模式中执行此脚本。

最佳答案

通过 Not Found 异常可以清楚地看出 Spring boot 无法找到 schema.sql 文件。

只需将src/main/resources/db/schema.sql复制到src/test/resources/db/schema.sql即可。

关于spring-boot - Spring Boot 2.0.4 - H2 数据库 - @SpringBootTest - 因 : org. h2.jdbc.JdbcSQLException 导致失败:未找到架构 "classpath:db/schema.sql",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51906949/

相关文章:

java - 测试 spring boot HandlerInterceptor 时避免 Controller 初始化

java - Spring Boot 2.0 迁移后 : jdbcUrl is required with driverClassName

mysql - 如何使用 Java SprinBoot CrudRepository 在 MySQL 中插入/更新 JSON 列的行

java - persistence.xml 使用 java 配置

java - 如何从 OneToOne 关系中获取特定字段?

mysql - 如何计算JPA查询中的行表

java - 无限循环数据库检查

java - 从 JAR 文件中包含的应用程序访问 H2 数据库

java - Spring Boot MSSQL Kerberos 身份验证

java - 在连接上设置 H2 模式