能跑通单体 Spring Boot 不代表微服务环境就 ready——缺 Spring Cloud 依赖、模块 classpath 隔离、多 module 启动顺序或 Actuator 端点识别任一环,均导致 DiscoveryClient null 或 EurekaRegistration 失败。

能跑通单体 Spring Boot 项目,不等于微服务环境就 ready——缺一个配置,DiscoveryClient 就是 null,EurekaRegistration 就会失败。
为什么 Spring Boot Dashboard 看不到子模块
VSCode 默认只把含 pom.xml 的文件夹当“项目”,但微服务是多 module 结构:父 pom.xml 下有 service-registry、api-gateway、user-service 等子模块。插件不会自动递归扫描子目录。
- 必须手动打开每个子模块的根目录(即含自己
pom.xml的那层),等右下角出现Java 17+ Spring Boot project detected - 如果子模块用
<packaging>pom</packaging>,它本身不可运行,VSCode 会跳过——确保业务模块(如user-service)是<packaging>jar</packaging> - 删掉所有子模块下的
.vscode/文件夹,再逐个重开,避免旧缓存干扰识别
launch.json 必须为每个子模块单独配
图形化右键 Run 在微服务里基本不可靠:它无法区分 spring.profiles.active=dev 是给注册中心还是网关用,更没法控制启动顺序(比如必须先起 eureka-server 才能注册 user-service)。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
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 注解失效和 @EnableEurekaClient 标红是同一个问题
现象是 @Data 不生成 getter/setter,同时 @EnableEurekaClient 标红、DiscoveryClient 注入失败——这不是两个问题,是同一个底层原因:Lombok 注解处理器没加载 JDK 工具类,而 Spring Cloud 的 @Enable* 系列注解依赖相同的 annotation processing pipeline。
立即学习“Java免费学习笔记(深入)”;
- 检查 VSCode 设置中
java.configuration.updateBuildConfiguration是否设为automatic - 确认
lombok.config里没有禁用lombok.anyConstructor.addConstructorProperties=true这类影响 Spring Cloud 注解处理的配置 - 重启 VSCode 后,务必在子模块根目录下执行一次
mvn compile,触发注解处理器完整跑一遍
最常被忽略的是子模块的 cwd 和 env 配置——它们不是可选优化项,而是微服务模块间隔离的硬性前提;一旦用错路径或混用 args 传 profile,Spring Boot 就会静默加载错误的配置上下文,连日志都难定位。

















