Spring Boot微服务应基于spring-boot-starter-parent快速初始化,选用LTS版本(如3.3.5),引入web和actuator起步依赖,禁用banner;注册中心优先选Nacos或Consul,避免Eureka和ZooKeeper;本地联调推荐Docker Compose编排Nacos、MySQL等组件;配置须严格区分bootstrap.yml(仅放引导级配置)与application.yml,通过spring.profiles.active指定环境。
微服务不是从零写框架,而是基于约定优先的脚手架快速启动。Spring Boot 官方推荐用 spring-boot-starter-parent 作为父 POM,它统一管理依赖版本、插件配置和默认属性。不手动指定 spring-boot-dependencies 版本,否则容易触发 ClassNotFoundException 或自动配置失效。
关键操作点:
pom.xml 中声明 ,版本建议选 LTS(如 3.2.12 或 3.3.5),避免用 3.4.0-Mx 等里程碑版spring-boot-starter-web(提供内嵌 Tomcat 和 REST 支持)和 spring-boot-starter-actuator(健康检查、指标暴露)application.properties 加 spring.main.banner-mode=off,减少日志干扰org.springframework.boot spring-boot-starter-parent3.3.5
Eureka 2.x 自 2018 年起已停止维护,Netflix 官方明确标记为 deprecated。Spring Cloud 2025+ 版本默认移除对 Eureka 的原生支持,强行使用会导致 NoUniqueBeanDefinitionException 或服务无法注册。
替代方案对比:
Nacos:国产,同时支持服务发现 + 配置中心,控制台友好,spring-cloud-starter-alibaba-nacos-discove
ry 适配 Spring Boot 3 需搭配 spring-cloud-starter-loadbalancer
Consul:HashiCorp 出品,强一致性,但需额外部署 Agent,spring-cloud-starter-consul-discovery 默认启用 ACL,本地开发建议关掉 spring.cloud.consul.config.enabled=false
ZooKeeper:CP 模型导致脑裂风险高,Spring Cloud ZooKeeper 3.x 对 Java 17+ 兼容性差微服务不是单体打包就能跑通。常见失败场景是服务 A 调用服务 B 时抛 Connection refused,本质是没启动注册中心或 MySQL/Redis 连不上。
推荐用 docker-compose.yml 统一编排基础组件,而不是靠 IDE 手动启多个 Spring Boot 实例:
8848,并挂载自定义 cluster.conf 避免集群模式误启mysql:8.0 镜像,显式设置 MYSQL_ROOT_PASSWORD,Spring Boot 配置里用 jdbc:mysql://mysql:3306/demo?serverTimezone=UTC(注意 host 是 mysql,不是 localhost)depends_on 保证启动顺序,但要配合 Spring Boot 的 spring.sql.init.mode=always 做初始化重试services:
nacos:
image: nacos/nacos-server:v2.3.2
ports: ["8848:8848"]
environment:
- MODE=standalone
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=123456微服务配置加载顺序很关键:bootstrap.yml 优先于 application.yml 加载,且只被 Spring Cloud Config/Nacos 等外部配置中心读取。如果把 spring.cloud.nacos.server-addr 写在 application.yml 里,服务根本注册不上去。
另一个高频问题:本地开发切 dev 环境,但启动类没传参,spring.profiles.active 默认是 default,导致读不到 application-dev.yml。
-Dspring.profiles.active=dev
bootstrap.yml 只放注册中心地址、配置中心地址、加密密钥等“引导级”配置bootstrap.yml 里写业务属性(如 user.timeout=3000),会引发 IllegalStateException: Unable to load config data
配置加载链实际是:bootstrap.yml → 连接 Nacos → 拉取远程 application-dev.yml → 合并本地 application-dev.yml → 覆盖 application.yml。