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 + Maven 快速初始化微服务模块
微服务不是从零写框架,而是基于约定优先的脚手架快速启动。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(健康检查、指标暴露) - 禁用默认 banner:在
application.properties加spring.main.banner-mode=off,减少日志干扰
org.springframework.boot spring-boot-starter-parent 3.3.5
注册中心选型:Eureka 已停更,优先用 Nacos 或 Consul
Eureka 2.x 自 2018 年起已停止维护,Netflix 官方明确标记为 deprecated。Spring Cloud 2022+ 版本默认移除对 Eureka 的原生支持,强行使用会导致 NoUniqueBeanDefinitionException 或服务无法注册。
替代方案对比:
立即学习“Java免费学习笔记(深入)”;
-
Nacos:国产,同时支持服务发现 + 配置中心,控制台友好,spring-cloud-starter-alibaba-nacos-discovery适配 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+ 兼容性差
本地多服务联调:用 Docker Compose 启动依赖组件
微服务不是单体打包就能跑通。常见失败场景是服务 A 调用服务 B 时抛 Connection refused,本质是没启动注册中心或 MySQL/Redis 连不上。
推荐用 docker-compose.yml 统一编排基础组件,而不是靠 IDE 手动启多个 Spring Boot 实例:
- 注册中心(Nacos)端口映射到
8848,并挂载自定义cluster.conf避免集群模式误启 - MySQL 用
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调试时别忽略 spring.profiles.active 和 bootstrap.yml
微服务配置加载顺序很关键:bootstrap.yml 优先于 application.yml 加载,且只被 Spring Cloud Config/Nacos 等外部配置中心读取。如果把 spring.cloud.nacos.server-addr 写在 application.yml 里,服务根本注册不上去。
另一个高频问题:本地开发切 dev 环境,但启动类没传参,spring.profiles.active 默认是 default,导致读不到 application-dev.yml。
- IDEA 启动配置里加 VM options:
-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。










