在Java中如何搭建微服务开发环境_Java微服务环境准备说明

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.123.3.5),避免用 3.4.0-Mx 等里程碑版
  • 必须引入 spring-boot-starter-web(提供内嵌 Tomcat 和 REST 支持)和 spring-boot-starter-actuator(健康检查、指标暴露)
  • 禁用默认 banner:在 application.propertiesspring.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 2025+ 版本默认移除对 Eureka 的原生支持,强行使用会导致 NoUn

iqueBeanDefinitionException 或服务无法注册。

替代方案对比:

  • 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