当前位置: 首页 > 知识库问答 >
问题:

内存中的H2数据库在更新到SpringBoot 2.4.0后不工作

傅自明
2023-03-14
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Driver com.microsoft.sqlserver.jdbc.SQLServerDriver claims to not accept jdbcUrl, jdbc:h2:mem:integrationTestDB;DB_CLOSE_DELAY=-1;MODE=MSSQLServer;INIT=CREATE SCHEMA IF NOT EXISTS dbo\;SET SCHEMA dbo
Caused by: java.lang.RuntimeException: Driver com.microsoft.sqlserver.jdbc.SQLServerDriver claims to not accept jdbcUrl, jdbc:h2:mem:integrationTestDB;DB_CLOSE_DELAY=-1;MODE=MSSQLServer;INIT=CREATE SCHEMA IF NOT EXISTS dbo\;SET SCHEMA dbo
spring.datasource.url=jdbc:h2:mem:integrationTestDB;\
  DB_CLOSE_DELAY=-1;\
  MODE=MSSQLServer;\
  INIT=CREATE SCHEMA IF NOT EXISTS dbo\\;SET SCHEMA dbo
spring.datasource.driver=org.h2.Driver
spring.datasource.hikari.driver-class-name=org.h2.Driver

hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.hbm2ddl.auto=none

spring.datasource.username=sa
spring.datasource.password=

spring.liquibase.user=sa
spring.liquibase.password=
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
    </parent>

我阅读了发行说明,找到了关于嵌入式数据库检测的部分:https://github.com/spring-projects/spring-boot/wiki/spring-boot-2.4-release-notes#embedded-database-detection

但加上

spring.datasource.initialization-mode=always

对财产也没有帮助。

你能给我一个提示吗,是什么导致了这个问题?

亲切的问候,乌尔里希

共有1个答案

慕嘉茂
2023-03-14

您的属性包含H2和SQL Server配置的混合。例如,您为数据源配置了一个H2 JDBC URL,但将Hibernate配置为使用sqlserverdialice。该异常显示在尝试初始化LiquiBase时使用了SQL Server的JDBC驱动程序。在我看来,您试图在集成测试中使用H2,取代部署应用程序时使用的SQL Server。

2.4.0中有一个新的spring.liquiBase.driver-class-name属性。如果未设置,则返回使用spring.datasource.driver-class-name。没有spring.datasource.driver属性,所以请尝试替换以下两行:

spring.datasource.driver=org.h2.Driver
spring.datasource.hikari.driver-class-name=org.h2.Driver

下面一行:

spring.datasource.driver-class-name=org.h2.Driver
 类似资料:
  • 问题内容: 我有一个带有URL的H2数据库。我使用创建表格;。然后,我使用从(空)表中选择所有内容。到目前为止,一切都很好。 但是,如果将URL更改为,唯一的区别是数据库现在仅在内存中,这给了我一个提示。我可能在这里缺少一些简单的东西,但是任何帮助将不胜感激。 问题答案: hbm2ddl在创建表后关闭连接,因此h2放弃该连接。 如果你的连接网址是这样配置的 在最后一个连接关闭时,数据库的内容会丢失

  • 我正在inMemory数据库中插入数据,当插入数据时,我得到了一个问题, 使用boot、JPA、H2db在内存中插入数据的示例程序 > 创建Pojo并使用JPA注释进行注释 > 配置在app.prop:中 在data.sql文件中添加了给定表 为data.sql中提到的转换添加了名称。 在哪里配置;在Springboot中? 波乔 控制器 错误原因:对名为'in memorydatabaseShu

  • 我使用h2db进行测试,使用hibernate自动创建表,但希望flyway在数据库中插入脚本。所以,我的飞行路线没有创建脚本。 首先,我不确定这是否可能。但是当我使用一些插入脚本时,我的测试失败了,因为flyway无法插入记录,抱怨表格不存在。 似乎在h2创建表之前,它就已经在尝试运行脚本了。 我正在使用Spring靴来调用飞行路线。所以,我只需要这个依赖项和一个数据库。类路径中的migarat

  • 我试图用内存中的数据库来测试JDBC客户机,这样我就可以用单元测试来测试各种情况。 以下是我目前掌握的信息: 测试目录中的Application.Properties如下所示:

  • 我对冬眠很陌生,所以我的问题对你来说很明显。我在H2控制台用3个表(data.mv.db)创建了数据库,插入一些值,然后将其复制到项目路径中的数据库文件夹中。现在我试图阅读其中一个测试,但总是有错误,即表不存在。我试着给连接url添加一些属性,比如连接延迟或者不把字母改成大写,但仍然是一样的。 错误: 我试过编辑配置。所以我补充: 并使数据库为空。奇怪的是,在H2控制台打开后,Java创建的数据库

  • 我使用 .deb 在 Ubuntu 系统中安装了 MySQL Workbench(community-6.2.3)。 工作台会话似乎看不到其他会话(应用程序/命令行客户端)对数据库的更新(DML)。 新会话能够在其启动时看到数据库的正确状态,但之后发生的更改对它不可见。似乎工作台 会话在工作台提交后确实与数据库同步。 我得到。 非工作台会话似乎没有任何这些问题。 我这是少了个配置什么的吗 更新: