spring boot单体可运行不等于微服务就ready,因微服务涉及spring cloud依赖、模块间classpath隔离、多module启动顺序及actuator端点识别等问题,缺一环即导致discoveryclient null或eurekaregistration失败。

能跑通单体 Spring Boot 不代表微服务环境就 ready——Spring Cloud 依赖、模块间 classpath 隔离、多 module 启动顺序、Actuator 端点识别,缺一环就卡在 DiscoveryClient null 或 EurekaRegistration failed。
为什么 Spring Boot Tools 识别不了 Eureka/Gateway 模块
VSCode 默认只把含 pom.xml 的文件夹当“项目”,但微服务是多 module 结构:父 pom 下有 service-registry、api-gateway、user-service 等子模块。插件不自动递归扫描子目录,导致 Spring Boot Dashboard 里只显示父工程,子模块没图标、没右键 Run 选项。
- 必须手动打开每个子模块的根目录(即含自己
pom.xml的那层),分别等右下角出现Java 17+Spring Boot project detected - 如果子模块用
<packaging>pom</packaging>,它本身不是可运行模块,VSCode 会跳过——确保业务模块(如user-service)是<packaging>jar</packaging> - 删掉所有子模块下的
.vscode/文件夹,再逐个重开,避免旧缓存干扰
launch.json 里怎么写多 module 微服务启动项
图形化右键 Run 在微服务里基本不可靠:它无法区分 spring.profiles.active=dev 是给注册中心还是网关用,更没法控制启动顺序(比如必须先起 eureka-server 才能注册 user-service)。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 每个可运行模块单独配一个
launch.json配置,mainClass必须写子模块自己的启动类全限定名,例如com.example.gateway.GatewayApplication -
cwd字段必须设为该子模块的绝对路径,不能用${workspaceFolder}—— 否则 JVM 加载不到子模块的application.yml - 传 profile 要用
env而非args:"env": {"SPRING_PROFILES_ACTIVE": "dev"},因为 Spring Boot 读取 profile 优先级:系统变量 > 命令行参数 > 配置文件 - 若要用 Maven 插件启动(如
spring-boot:run),type改成maven,projectName填子模块 artifactId,否则报Could not resolve dependencies
Lombok + Spring Cloud 注解处理器失效的根源
现象是 @Data 不生成 getter/setter,同时 @EnableEurekaClient 标红、DiscoveryClient 注入失败——这不是两个问题,是同一个底层原因:Lombok 注解处理器没加载 JDK 工具类,而 Spring Cloud 的 @Enable* 系列注解依赖相同的 annotation processing pipeline。
- 确认
pom.xml中lombokscope 是provided,且版本 ≥1.18.30(兼容 JDK 17+) - VSCode 设置里搜
java.configuration.updateBuildConfiguration,值必须是interactive或automatic,不能是disabled -
settings.json里加"java.configuration.runtimes",path必须指向 JDK 根目录(如C:/jdk-17),不是bin子目录,也不能带末尾反斜杠 - Windows 用户特别注意:
JAVA_HOME系统变量值末尾有\会导致 javac 工具类加载失败,Lombok 和 Spring 的 APT 全挂
微服务环境下最易被忽略的是模块间 classpath 隔离——VSCode 的 Java 插件默认按单 module 解析依赖,不会跨 module 自动合并 src/main/resources。哪怕 application.yml 写对了,如果它不在当前启动模块的 resources 目录下,Spring 就根本看不到。别指望父工程的配置“继承”下去,每个模块得自己管自己的配置文件位置和编码(UTF-8 无 BOM)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










