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

Gradle构建SpringBoot项目Docker镜像时测试环节连接报错

问题:Docker构建SpringBoot镜像时测试阶段数据库连接失败

错误日志

ApplicationTests > contextLoads() FAILED
80.30     java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180
80.30         Caused by: org.springframework.beans.factory.BeanCreationException at AbstractBeanFactory.java:326
80.30             Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1788
80.30                 Caused by: liquibase.exception.UnexpectedLiquibaseException at SpringLiquibase.java:259
80.30                     Caused by: liquibase.exception.DatabaseException at SpringLiquibase.java:251
80.30                         Caused by: org.postgresql.util.PSQLException at ConnectionFactoryImpl.java:346
80.30                             Caused by: java.net.ConnectException at Net.java:-2

Dockerfile内容

FROM gradle:8-jdk17 AS build
WORKDIR /app
COPY build.gradle.kts ./
COPY settings.gradle.kts ./
COPY settings.gradle.kts ./
#COPY gradle ./gradle
COPY src ./src
RUN gradle build --no-daemon

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

build.gradle.kts配置

plugins {
    id("org.springframework.boot") version "3.3.0"
    id("io.spring.dependency-management") version "1.1.5"
    kotlin("plugin.jpa") version "1.9.24"
    kotlin("jvm") version "1.9.24"
    kotlin("plugin.spring") version "1.9.24"
}

group = "com.delivery"
version = "0.0.1-SNAPSHOT"

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.liquibase:liquibase-core")
    implementation("org.springframework.boot:spring-boot-starter-oauth2-resource-server")
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("com.google.firebase:firebase-admin:9.3.0")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    implementation("org.springframework.boot:spring-boot-starter-amqp")
    runtimeOnly("org.postgresql:postgresql")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
    testImplementation("org.springframework.security:spring-security-test")
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

kotlin {
    compilerOptions {
        freeCompilerArgs.addAll("-Xjsr305=strict")
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

解决方案

方案1:构建阶段跳过测试

Docker构建过程中,测试代码会尝试连接PostgreSQL数据库,但此时容器内没有运行数据库实例,直接导致连接失败。修改Dockerfile中的构建命令,添加-x test参数跳过测试:

RUN gradle build --no-daemon -x test

同时清理Dockerfile里重复复制的settings.gradle.kts行,修改后完整内容:

FROM gradle:8-jdk17 AS build
WORKDIR /app
COPY build.gradle.kts ./
COPY settings.gradle.kts ./
#COPY gradle ./gradle
COPY src ./src
RUN gradle build --no-daemon -x test

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

方案2:配置测试使用嵌入式数据库

如果希望保留测试环节,可以配置测试环境使用H2嵌入式数据库,避免依赖外部PostgreSQL:

  1. 在src/test/resources下创建application-test.yml,添加配置:
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
  liquibase:
    enabled: false # 若需在测试环境执行Liquibase,可单独配置测试用changelog
  1. 在build.gradle.kts的dependencies中添加H2测试依赖:
testImplementation("com.h2database:h2")

这样测试阶段会自动使用H2数据库,无需连接外部PostgreSQL,即可正常完成测试并构建镜像。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:07:27