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

Spring Boot如何在同一端口部署两个不同Jar包的微服务

嘿,这个问题问得很接地气!答案是完全可行的,但直接把两个Jar都往80端口上绑肯定不行——毕竟同一端口同一时间只能被一个进程占用嘛。不过咱们有好几种靠谱的办法来实现你的需求,我给你梳理下最常用的几个:

可行方案梳理

1. 反向代理(最推荐,对原有服务零改动)

这是生产环境最常用的方式,比如用Nginx来做转发。步骤很简单:

  • 先把两个Spring Boot服务分别启动在不同的本地端口,比如第一个绑8080,第二个绑8081(启动的时候可以用java -jar xxx.jar --server.port=8080这种命令指定端口)
  • 然后配置Nginx监听80端口,根据请求的路径把流量转发到对应的服务。给你个简单的配置示例:
server {
    listen 80;
    server_name 你的服务器域名或IP;

    location /test {
        proxy_pass http://localhost:8080/test;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /test2 {
        proxy_pass http://localhost:8081/test2;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

这样用户访问http://你的服务器/test就会转到第一个服务,访问/test2就转到第二个服务,完美实现同一端口不同路径对应不同服务。

2. 用Spring Cloud Gateway做统一网关

如果你的服务以后可能还要扩展,用Spring Cloud Gateway会更贴合Spring生态。本质上它也是一个Spring Boot服务,你可以让它监听80端口,然后配置路由规则,把不同路径的请求转发到对应的后端服务。比如在Gateway的配置文件里加:

spring:
  cloud:
    gateway:
      routes:
        - id: test-service
          uri: http://localhost:8080
          predicates:
            - Path=/test/**
        - id: test2-service
          uri: http://localhost:8081
          predicates:
            - Path=/test2/**

启动Gateway服务后,同样可以实现和Nginx一样的效果,而且如果以后要加鉴权、限流之类的功能,扩展起来更方便。

3. 部署到Servlet容器(传统方式)

如果你的Spring Boot服务可以打成war包(需要修改启动类继承SpringBootServletInitializer),那可以把两个war包放到Tomcat、Jetty这类Servlet容器的webapps目录下:

  • 把第一个war包改名为test.war,第二个改名为test2.war
  • 启动Tomcat并让它监听80端口,这样Tomcat会自动把/test路径映射到第一个war包的服务,/test2映射到第二个。
    不过这种方式现在用得越来越少了,毕竟Spring Boot的Jar包部署更轻便。
总结

最推荐的还是反向代理(Nginx)的方式,操作简单,对原有服务没有任何改动,而且性能稳定。如果是Spring生态的项目,用Gateway也是不错的选择,扩展性更强。

内容的提问来源于stack exchange,提问作者Luís Palma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:12:43