Spring with Gradle - H2 控制台未显示在 localhost:8080/h2-console

Posted

技术标签:

【中文标题】Spring with Gradle - H2 控制台未显示在 localhost:8080/h2-console【英文标题】:Spring with Gradle - H2 console does not show in localhost:8080/h2-console 【发布时间】:2019-03-20 02:29:13 【问题描述】:

我下载了 gradle 并创建了指向现有 gradle 文件的新项目。现在我想连接到 H2.database。这是我的 build.gradle 文件:

plugins 
    id 'java'
    id 'org.springframework.boot' version '2.0.5.RELEASE'
    id "io.spring.dependency-management" version "1.0.6.RELEASE"

apply plugin: 'application'
apply plugin: 'idea'
group 'shop.hello.manualgradle'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8
mainClassName = 'hello.HelloWorld'

repositories 
    mavenCentral()


jar 
    baseName = 'gs-gradle'
    version = '0.1.0'

dependencies 
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'joda-time', name: 'joda-time', version: '2.2'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    compile 'com.h2database:h2'
    compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'


这是我在 src/main/resources 和 src/test/resources 中制作的 application.properties 文件

spring.datasource.name=ecommercedb
spring.jpa.show-sql=true
#H2 settings
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

我使用 gradle idea 运行项目以更新依赖项,然后 gradlew build 和 gradlew run。没有错误,但是当我转到 localhost:8080/h2-console 时,我得到的只是连接错误。我也尝试过使用 gradle build。为什么会这样?我也使用 IntelIJ,并且我有红色的 build 和 gradle 文件夹,为什么?我正在使用本指南:https://www.baeldung.com/spring-angular-ecommerce,但我使用自己的 gradle 而不是 Initializr,并且我在外部库中有 Gradle:com.h2.database 文件,所以我认为它应该可以工作!请帮忙

【问题讨论】:

当您执行gradlew run 时:您是否有这样的日志表明SpringBoot 应用程序已真正启动?你能分享一些日志跟踪吗? 【参考方案1】:

您的 Gradle 构建看起来不错,并且您的 application.properties 配置文件也正常。要使 H2 控制台可用,唯一要做的就是设置属性 spring.h2.console.enabled=true,就像您所做的那样:所以它应该可以工作......您不需要配置 datasource.url 或凭据,Springboot 将使用默认 url jdbc:h2:~/test.

您应该尝试配置 H2 db 日志记录级别并检查在启动应用程序或尝试访问 H2 控制台时是否可以看到错误/警告:在您的 application.properties 文件中添加以下属性

spring.datasource.url=jdbc:h2:~/test;TRACE_LEVEL_FILE=4

然后,您应该在启动应用程序时看到如下痕迹:

2018-10-15 19:56:25.090 DEBUG 7576 --- [           main] h2database                               : test:jdbc[3] 
/**/conn0.clearWarnings();

当您尝试访问 H2 控制台时,您应该会看到类似这样的痕迹:

 2018-10-15 19:57:21.179 DEBUG 7576 --- [nio-8080-exec-7] h2database                               : test:jdbc[13] Table      :     potential plan item cost 10 000 index meta

【讨论】:

M.Ricciuti 这很奇怪,因为我没有看到任何痕迹。我所看到的只是构建成功,我进行了 gradle 构建,然后 gradle 运行,它通过了打印 Hello World,但当我转到 localhost:8080/h2-console 或 /console 时出现错误连接 - Intelij 终端中仍然没有跟踪.我还尝试了 Khwaja Sanjari,并粘贴了他发布的线程中的代码,我什至使用 ServletRegistrationBean 创建了新的应用程序类 - 仍然:没有错误,本地主机上没有控制台,什么都没有【参考方案2】:

我遇到了同样的问题,发现我的 application.properties 文件中 spring.h2.console.path=/h2-console 后面有空格。这导致它路由不正确。这是一个很老的问题,但我想我会添加为我解决问题的方法。

【讨论】:

以上是关于Spring with Gradle - H2 控制台未显示在 localhost:8080/h2-console的主要内容,如果未能解决你的问题,请参考以下文章

Spring Server with H2 Database SchemaUpdate HHH000299

[Spring boot] Integrating with h2 database

Spring 学习 171005 Building Java Projects with Gradle

Spring Boot with H2 每次 web 应用启动时都会运行 data.sql,这正常吗?

flyway with spring boot and gradle--org.flywaydb.core.Flyway: 方法 <init>()V not found

用于与 postgresql 在内存中兼容 h2 的 Spring Boot 属性