You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个SpringBoot微服务连接到MongoDB?解决连接拒绝异常

解决Stock微服务MongoDB连接拒绝问题

问题分析

从异常信息可见,Stock微服务尝试连接localhost:27017被拒绝,而非配置文件中指定的mongodb:27017。结合配置细节,问题根源如下:

  1. application.yml配置错误:Stock的application.yml中server.port写成了5000:5000,这是Docker端口映射的写法,Spring Boot的server.port只需指定容器内端口(应为5000),错误配置可能导致Spring加载配置异常,转而读取application.properties中的localhost配置。
  2. 配置优先级冲突:application.properties与application.yml共存时,部分场景下properties优先级更高,导致Stock微服务采用了spring.data.mongodb.host=localhost的配置——容器内的localhost指向自身,而非MongoDB容器。
  3. 服务启动顺序问题:Stock微服务可能在MongoDB容器完全就绪前就发起连接,导致连接失败。

修复步骤

1. 修正Stock微服务的application.yml

将错误的server.port配置改为容器内端口:

server:
  port: 5000
  contextPath: /stock

spring:
  application:
    name: Stock-Service
  data:
    mongodb:
      uri: mongodb://mongodb:27017/store_stock

2. 统一MongoDB配置(推荐)

删除application.properties中的MongoDB相关配置,避免配置冲突:

# 仅保留端口配置,移除MongoDB相关项
server.port=5000

3. 优化docker-compose.yml配置

  • 为stock-service添加依赖,确保MongoDB启动就绪后再启动服务
  • 替换MongoDB健康检查命令(mongo镜像默认无nc,改用官方推荐的ping命令)

修改后的Stock微服务docker-compose.yml:

version: "3.8"
services:
  stock-service:
    build: .
    container_name: stock-service
    ports:
      - 5000:5000
    depends_on:
      mongodb:
        condition: service_healthy
  mongodb:
    image: mongo:latest
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017 --quiet
      interval: 5s
      timeout: 5s
      retries: 3
    container_name: mongodb-stock
    ports:
      - 27017:27017

4. 验证修复效果

重新构建并启动容器:

docker-compose down
docker-compose build
docker-compose up -d

查看Stock微服务日志,确认连接目标为mongodb:27017而非localhost:27017。

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:00:57