You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Micronaut本地/测试可连数据库,Docker镜像运行遇Dialect识别错误

Micronaut + PostgreSQL Docker运行时方言识别失败问题

本地运行及测试Micronaut项目(使用PostgreSQL)完全正常,但生成Docker镜像运行时出现以下错误:

Caused by: org.hibernate.HibernateException: HR000048: Could not determine Dialect from JDBC driver metadata (specify a connection URI with scheme 'postgresql:', 'mysql:', 'cockroachdb', or 'db2:')

已尝试的配置

根据官方文档要求,生产环境需将Test Resources注入的属性指向真实数据库,可通过环境变量实现。已参考JDBC相关指南配置application.yaml:

micronaut:
  application:
    name: micronaut-guide
netty:
  default:
    allocator:
      max-order: 3
#tag::jpa[]
jpa:
  default:
    entity-scan:
      packages:
        - 'example.micronaut.domain'
    properties:
      hibernate:
        show-sql: true
        hbm2ddl:
          auto: update 
        connection:
          db-type: postgres 
    reactive: true
#end::jpa[]
datasources:
  default:
    driverClassName: org.postgresql.Driver
    db-type: postgresql
    schema-generate: CREATE_DROP
    dialect: POSTGRES
jpa.default.properties.hibernate.hbm2ddl.auto: update

运行Docker容器时已传递环境变量:

docker run micronaut-postgres -p 8080:8080 --rm -e DATASOURCES_DEFAULT_URL=$DATASOURCES_DEFAULT_URL -e DATASOURCES_DEFAULT_USERNAME=$DATASOURCES_DEFAULT_USERNAME -e DATASOURCES_DEFAULT_PASSWORD=$DATASOURCES_DEFAULT_PASSWORD

本地环境变量验证:

◼ ~/Code/Personal/micronaut-postgres $ echo $DATASOURCES_DEFAULT_URL                                                             130 
jdbc:postgresql://localhost:3306/db

项目build.gradle配置:

plugins {
    id("org.jetbrains.kotlin.jvm") version "1.6.21"
    id("org.jetbrains.kotlin.kapt") version "1.6.21"
    id("org.jetbrains.kotlin.plugin.allopen") version "1.6.21"
    id("org.jetbrains.kotlin.plugin.jpa") version "1.6.21"
    id("com.github.johnrengelman.shadow") version "7.1.2"
    id("io.micronaut.application") version "3.6.7"
    id("io.micronaut.test-resources") version "3.6.7"
}

version = "0.1"
group = "example.micronaut"

repositories {
    mavenCentral()
}

dependencies {
    kapt("io.micronaut.data:micronaut-data-processor")
    kapt("io.micronaut:micronaut-http-validation")
    kapt("io.micronaut.serde:micronaut-serde-processor")
    implementation("io.micronaut:micronaut-http-client")
    implementation("io.micronaut.data:micronaut-data-hibernate-reactive")
    implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
    implementation("io.micronaut.reactor:micronaut-reactor")
    implementation("io.micronaut.reactor:micronaut-reactor-http-client")
    implementation("com.ongres.scram:client:2.1")

    implementation("io.micronaut.serde:micronaut-serde-jackson")
//    implementation("io.vertx:vertx-mysql-client")
    implementation("io.vertx:vertx-pg-client")
    implementation("io.micronaut.sql:micronaut-vertx-pg-client")

    implementation("jakarta.annotation:jakarta.annotation-api")
    implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
    runtimeOnly("ch.qos.logback:logback-classic")

//    testResourcesService("mysql:mysql-connector-java")
    testResourcesService("org.postgresql:postgresql")

    compileOnly("org.graalvm.nativeimage:svm")

    implementation("io.micronaut.sql:micronaut-vertx-pg-client")
    implementation("io.micronaut:micronaut-validation")

    runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
}


application {
    mainClass.set("example.micronaut.ApplicationKt")
}
java {
    sourceCompatibility = JavaVersion.toVersion("11")
}

tasks {
    compileKotlin {
        kotlinOptions {
            jvmTarget = "11"
        }
    }
    compileTestKotlin {
        kotlinOptions {
            jvmTarget = "11"
        }
    }
}
graalvmNative.toolchainDetection = false
micronaut {
    runtime("netty")
    testRuntime("junit5")
    processing {
        incremental(true)
        annotations("example.micronaut.*")
    }
    testResources {
        additionalModules.add("hibernate-reactive-postgresql")
    }
}


tasks.named("dockerfile") {
    baseImage = "eclipse-temurin:17.0.5_8-jre-jammy"
}

标准复现场景

在Micronaut官方JPA+Hibernate示例项目中,同样出现该问题:生成Docker镜像运行时触发相同错误。

镜像构建日志片段:

Step 8/8 : ENTRYPOINT ["java", "-jar", "/home/app/application.jar"]
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in b4ac7195ad12
Removing intermediate container b4ac7195ad12
 ---> 98936716be8c
Successfully built 98936716be8c
Successfully tagged micronautguide:latest
Created image with ID '98936716be8c'.

环境变量验证及运行命令:

$ echo $JDBC_URL                                                                                                                                                                  
jdbc:mysql://production-server:3306/micronaut

$ docker run --rm -e DATASOURCES_DEFAULT_URL=$JDBC_URL -e DATASOURCES_DEFAULT_USERNAME=$JDBC_USER -e DATASOURCES_DEFAULT_PASSWORD=$JDBC_PASSWORD -it -p 8080:8080 98936716be8c 125 
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

运行时错误:

Caused by: org.hibernate.HibernateException: HR000048: Could not determine Dialect from JDBC driver metadata (specify a connection URI with scheme 'postgresql:', 'mysql:', 'cockroachdb', or 'db2:')

内容的提问来源于stack exchange,提问作者Bertuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:30:33