首页 > 解决方案 > 使用 Spring-Boot 2.3.3 H2 内存数据库抛出 NonTransientConnectionException

问题描述

目前我正在开发一个 Spring-Boot 项目,不幸的是遇到了一个我不知道如何解决的错误......

我在application.properties中为我的项目设置了 H2 In-Memory-Databae,如下所示:

    # H2 In-Memory-Database Config
    spring.datasource.generate-unique-name=false
    spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL
    spring.h2.console.enabled=true

在 localhost:8080/h2-console 上调用 H2-Console 并尝试登录,它会抛出以下错误:

找不到数据库“/Users/.../testdb”,要么预先创建它,要么允许远程创建数据库(不推荐在安全环境中)[90149-200] 90149/90149 org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "/未找到“用户/supportmicha/testdb”,预先创建或允许远程创建数据库(不推荐在安全环境中使用)[90149-200]

数据在那里,并且它在应用程序开始使用这个data.sql脚本填充:

    INSERT INTO my_table (id, name, style, created_date, last_modified_date, min_on_hand, quantity_to_produce, price, upc, version ) values ('0a818933-087d-47f2-ad83-2f986ed087eb', 'TestName_1', 'TestStyle_1', CURRENT_TIMESTAMP , CURRENT_TIMESTAMP , 12,  200, 12.95, '0631234200036', 1);
    INSERT INTO my_table (id, name, style, created_date, last_modified_date, min_on_hand, quantity_to_brew, price, upc, version ) values ('a712d914-61ea-4623-8bd0-32c0f6545bfd', 'TestName_2', 'TestStyle_2', CURRENT_TIMESTAMP , CURRENT_TIMESTAMP , 12,  200, 12.95, '0631234300019', 1);
    INSERT INTO my_table (id, beer_name, beer_style, created_date, last_modified_date, min_on_hand, quantity_to_produce, price, upc, version ) values ('026cc3c8-3a0c-4083-a05b-e908048c1b08', 'TestName_3', 'TestStyle_3', CURRENT_TIMESTAMP , CURRENT_TIMESTAMP , 12,  200, 12.95, '0083783375213', 1);

在 stackoverflow 上的另一个对话中,有人通过使用较旧的 Spring-Boot-Version (2.1.15) 解决了这个问题——但我现在使用的是 2.3.3,保留这个版本非常重要。

另一个提到它可以通过将生成唯一名称设置为 false 来解决 - 如下所示:

    spring.datasource.generate-unique-name=false

但这没有帮助。

如果有人可以提示这里到底出了什么问题以及如何解决它,我会很高兴。

标签: spring-booth2

解决方案


当您调用 H2 控制台并看到 H2 登录表单时,将JDBC URL:表单字段值设置为jdbc:h2:mem:testdb


推荐阅读