无法连接到h2控制台

在使用SpringBoot时,在内存中使用h2数据库时,无法从h2控制台连接到数据库。

错误原因:找不到数据库”mem:testdb”,请预先创建它或允许远程数据库创建(不推荐在安全环境中使用)[90149-214] 90149/90149

环境
IDE:STS 3.9.7 RELEASE
JAVA:8
他使用以下设置文件。

事件发生时的配置文件

应用程序配置文件
// 文件内容(点击展开)
// 启用控制台
spring.h2.console.enabled=true
// 控制台路径
spring.h2.console.path=/h2-console
// 是否跟踪
spring.h2.console.settings.trace=true
// 是否允许远程连接
spring.h2.console.settings.web-allow-others=false
// 创建的数据库名称
spring.datasource.url=jdbc:h2:mem:testdb
// 数据库驱动程序类名
spring.datasource.driver-class-name=org.h2.Driver
// 用户密码
spring.datasource.username=sa
spring.datasource.password=
创建.gradle文件
文件内容(点击展开)插件 {
id ‘org.springframework.boot’ version ‘2.7.4’
id ‘io.spring.dependency-management’ version ‘1.0.14.RELEASE’
id ‘java’
id ‘war’
}

组 = ‘com.example’
版本 = ‘0.0.1-SNAPSHOT’
源兼容性 = ‘1.8’

仓库 {
中央仓库()
}

依赖项 {
实现 ‘org.springframework.boot:spring-boot-starter-thymeleaf’
实现 ‘org.springframework.boot:spring-boot-starter-web’
运行时仅限 ‘com.h2database:h2’
提供运行时 ‘org.springframework.boot:spring-boot-starter-tomcat’
测试实现 ‘org.springframework.boot:spring-boot-starter-test’
}

任务.命名为(‘测试’) {
使用JUnit平台()
}

「implementation ‘org.springframework.boot:spring-boot-starter-web’」和「runtimeOnly ‘com.h2database:h2’」是启动H2控制台时所需的库。

设定.gradle
文件内容(点击展开)rootProject.name = ‘JavaRestApi’

解决方案1:在build.gradle文件中添加以下内容,并在IDE的控制台日志中确认JDBC URL。

实现’org.springframework.boot:spring-boot-starter-jdbc’

这样,我的IDE(综合开发环境)的日志会显示类似于以下内容:
“INFO 17824 — [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2控制台可在’/h2-console’访问。数据库可在’jdbc:h2:mem:○○○○-○○’访问。”
然后,我可以将’jdbc:h2:mem:○○’复制到JDBC URL中以进行连接。

由于Spring Boot的版本不同,导致即使指定了上述”application.properties”中的”创建DB名称”,最终生成的却完全不同的原因是,其默认设置会随机生成模式名称。

关闭随机生成模式的设置为解决方案2。

在 application.properties 中添加以下内容
spring.datasource.generate-unique-name=false

这将不再随机生成模式,而是可以在”testdb”中生成。
在控制台中显示的JDBC URL也如下所示:
“INFO 17824 — [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console 可用于‘/h2-console’。数据库可在‘jdbc:h2:mem:testdb’访问。”

    参考記事
广告
将在 10 秒后关闭
bannerAds