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

Spring Boot微服务构建成功但启动卡住无报错问题求助

Spring Boot启动无报错但卡住的排查方案

问题概述

Spring Boot Starter应用构建成功,但启动时卡在某阶段无进展、无任何错误输出,等待后问题仍未解决。启动状态截图如下:
启动状态截图

项目build.gradle完整配置:

buildscript {
    dependencies{
//        classpath(libs.plugin.sphinx.gradle)
        classpath("com.github.davidmc24.gradle.plugin:gradle-avro-plugin:1.2.0")
    }
    ext {
//        jib_version = '2.7.1'
        gradle_git_version = '1.5.1'
        spring_boot_version = '2.6.6'
        spring_dependency_management_version = '1.0.11.RELEASE'
//        sphinx_version = '2.6.1'
//        sonar_qube_version = '2.8'
//        johnrengelman_processes = '0.5.0'
//        openapi_gradle_plugin = '1.3.0'
//        franzbecker_gradle_plugin = '4.0.0'
//        openapi_core_version = '1.4.3'
    }
}

plugins {
    id 'java'
    id 'maven-publish'
    id 'groovy'
    id 'jacoco'
    alias(libs.plugins.plugin.gcloud.jib)
    alias(libs.plugins.plugin.springframework.boot)
    alias(libs.plugins.plugin.gradle.git.properties)
    alias(libs.plugins.plugin.spring.dependencymgmt)
//    alias(libs.plugins.plugin.openapi.gen)
    alias(libs.plugins.plugin.sonarqube)
    alias(libs.plugins.plugin.freeair.lombok)
//    alias(libs.plugins.plugin.kotlin.jvm)
}
/*
plugins.withType(JacocoPlugin) {
    tasks["test"].finalizedBy 'jacocoTestReport'
}*/

springBoot {
    buildInfo()
}


/*jib {
    // specify the name of docker image to be built
    to.image = "eu.gcr.io/dmn01-rskctl-bld-01-2fd1/rsk/nfr-op-consumer-svc/nfr-op-consumer-svc"

    // specify the exact base image to be used.
    //eg: harbor.mgmt-bld.oncp.dev/mve_tools_rtl/sbs-java-wss-distroless:release_v0.8.0
//    from.image = "<key your base image>"
    from.image = "harbor.mgmt-bld.oncp.dev/base_images/distroless/java:nonroot_912dc0513659"
    container.user = "nonroot"
}*/

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}

repositories {
    maven {
        url = "https://nexus.mgmt-bld.oncp.dev/repository/maven-public/"
    }
    maven {
        url = "https://nexus.sbs-bld.oncp.dev/repository/shared-services/"
    }
    mavenCentral()
}

def spring_cloud_version = 'Hoxton.SR12'
def gcp_cloud_version = '24.3.0'
def lombok_version = '1.18.26'
def spring_boot_version = '2.6.6'
def spring_cloud_gcp_version = "4.1.4"



dependencies {
    implementation "org.projectlombok:lombok:${lombok_version}"

    implementation 'org.json:json:20220320'

    implementation "org.springframework.boot:spring-boot-starter-log4j2:${spring_boot_version}"
    implementation 'org.springframework:spring-core:5.3.20'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.google.cloud:google-cloud-core'

    implementation 'com.google.cloud:spring-cloud-gcp-starter-storage'
    implementation 'com.google.cloud:google-cloud-bigquery'
    implementation platform('com.google.cloud:libraries-bom:26.11.0')


    testImplementation ('org.springframework.boot:spring-boot-starter-test:2.6.6') {
        exclude group: 'junit', module: 'junit'
    }

    annotationProcessor "org.projectlombok:lombok:${lombok_version}"

}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${spring_cloud_version}"
        mavenBom "com.google.cloud:libraries-bom:${gcp_cloud_version}"
        mavenBom "com.google.cloud:spring-cloud-gcp-dependencies:${spring_cloud_gcp_version}"
    }
}

group = "com.lbg.dmn01.rsk"
version = "1.0.0"
sourceCompatibility = '11'
targetCompatibility = '11'

publishing {
    publications {
        maven(MavenPublication) {
            from(components.java)
        }
    }
}

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
//    dependsOn openApiGenerate
}

/*sphinx {
    sourceDirectory = "${projectDir}/documentation/source"
    outputDirectory = "${projectDir}/documentation/target"
}*/

sonarqube {
    properties {
        property "sonar.sourceEncoding", "UTF-8"
        property "sonar.exclusions", "**/package-name1/**, **/package-name2/**, **/ClassName1.java, **/ClassName2.java"
        property 'sonar.coverage.jacoco.xmlReportPaths', "$projectDir/build/reports/jacoco/test/jacocoTestReport.xml"
        property "sonar.junit.reportsPath", "$projectDir/build/test-results/test"
        //ignore listed rules
        property "sonar.issue.ignore.multicriteria", "e1"
        //Local-Variable Type Inference should be used (Declare this local variable with "var" instead., )
        property "sonar.issue.ignore.multicriteria.e1.ruleKey", "java:S6212"
        property "sonar.issue.ignore.multicriteria.e1.resourceKey", "**/*"
    }
}

/*jacocoTestReport {
    reports {
        xml.enabled true
        csv.enabled false
    }
}*/

tasks.named('test') {
    useJUnitPlatform()
}

排查步骤

1. 优先排查GCP资源依赖阻塞

项目引入了spring-cloud-gcp-starter-storage和google-cloud-bigquery,这类组件启动时会尝试连接GCP服务。如果环境未配置GCP认证(如未设置GOOGLE_APPLICATION_CREDENTIALS环境变量、权限不足),应用会卡在认证/连接阶段,且无明确报错。

  • 临时验证:注释掉这两个GCP依赖,重新启动应用,看是否能正常完成启动。
  • 解决措施:配置GCP服务账号密钥,确保应用有权访问对应资源;开发环境可临时添加spring.cloud.gcp.enabled=false禁用GCP自动配置。

2. 调高日志级别,捕获启动细节

当前日志级别可能不足以输出阻塞点的细节,调整日志配置:

  • 在application.properties或log4j2.xml中添加:
    logging.level.org.springframework=DEBUG
    logging.level.com.google.cloud=DEBUG
    
    重启后查看最后输出的日志内容,定位具体阻塞的Bean或初始化步骤。

3. 检查自定义初始化逻辑的阻塞

Tomcat已初始化端口,但应用未完成启动,可能是自定义Bean的初始化逻辑(如@PostConstruct、CommandLineRunner、ApplicationRunner)存在阻塞操作(比如无限循环、等待外部资源)。

  • 排查代码中所有初始化相关逻辑,检查是否有同步阻塞代码。
  • 使用jstack命令分析线程堆栈:
    # 获取应用进程ID
    jps
    # 导出线程堆栈
    jstack <进程ID> > thread_dump.txt
    
    查看堆栈中处于WAITING或RUNNABLE状态的线程,找到阻塞源头。

4. 修复版本不匹配的依赖冲突

你的Spring Boot版本是2.6.6,但Spring Cloud使用的是Hoxton.SR12(适配Spring Boot 2.3.x-2.4.x),版本不匹配可能导致隐式依赖冲突,引发启动阻塞。

  • 调整Spring Cloud版本为2021.0.5(Jubilee,适配Spring Boot 2.6.x);或降低Spring Boot版本到2.4.x匹配Hoxton版本。
  • 执行gradle dependencies查看依赖树,排查重复或冲突的依赖(比如Spring Core版本是否统一)。

5. 禁用冗余自动配置类

添加配置禁用不必要的自动配置类,逐步排查:

spring.autoconfigure.exclude=org.springframework.cloud.gcp.autoconfigure.storage.GcpStorageAutoConfiguration,com.google.cloud.spring.autoconfigure.bigquery.BigQueryAutoConfiguration

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:55:21