最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot同時監(jiān)聽多個端口的完整方法

 更新時間:2025年11月06日 09:09:03   作者:SimonKing  
這篇文章主要為大家詳細(xì)介紹了SpringBoot同時監(jiān)聽多個端口的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

01 引言

平時開發(fā)中常見的是一個Tomcat一個端口被訪問。從來沒有考慮過一個接口可以通過多個端口同時訪問。

直到前兩天看到一個帖子說,SpringBoot同時監(jiān)聽多個端口。于是自己玩了一下,感覺蠻有意思的,就整理一下分享給大家。

02 場景假設(shè)

假設(shè)有一套系統(tǒng)運(yùn)行平穩(wěn),得到合作商的青睞,想要有一套一模一樣的系統(tǒng)。領(lǐng)導(dǎo)要求重新部署一套,但是為了節(jié)省經(jīng)費(fèi),領(lǐng)導(dǎo)不提供多余的服務(wù)器,希望能夠在原來的服務(wù)器的基礎(chǔ)上技能讓自己用,也能讓合作商使用。

# 自己使用
curl http://localhost:8081/a/api/foo

# 合作商使用
curl http://localhost:8082/b/api/foo

這樣的情況下,聰明的你想到了同一個Tomcat開放兩個端口,一個給自己用,一個給合作商用。

03 問題解決

3.1 開發(fā)多接口

我們先不管端口的分配,我們先看看能不能開方多個接口。當(dāng)然可以。

我們需要配置org.springframework.boot.web.servlet.server.ServletWebServerFactoryl類:

@Bean
public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    Connector aConnector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
    aConnector.setPort(8081);
    factory.addAdditionalTomcatConnectors(aConnector);

    Connector bConnector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
    bConnector.setPort(8082);
    factory.addAdditionalTomcatConnectors(bConnector);
    return factory;
}

這里開放了80818082兩個接口。這兩個接口不影響默認(rèn)端口,加上默認(rèn)端口8080總共有3個端口可以同時訪問。

Java測試

@Slf4j
@RestController
@RequestMapping("/api")
public class FooController {

    @GetMapping("/foo")
    public String foo() {
        return "foo";
    }
}
# 可以訪問的路徑
curl http://localhost:8080/api/foo
curl http://localhost:8081/api/foo
curl http://localhost:8082/api/foo

上面的三種方式都可以訪問。這就實現(xiàn)了一個接口三個端口都可以訪問的效果。

3.2 端口分配

為了實現(xiàn)不同接口的資源隔離。我們將代碼復(fù)制了一份,為了方便演示,修改了一點提示語。

假設(shè)FooController控制層給自己用,使用8081端口,并加前綴a。而FooV2Controller給合作商用,使用8082端口,并加前綴b。

我們將在不改變控制層代碼的情況下,通過配置的方式完成資源的隔離。通過攔截器使用端口路由攔截。

public class MultiPortIntercpetor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        int localPort = request.getLocalPort();
        String requestURI = request.getRequestURI();
        if (localPort == 8081 && requestURI.startsWith("/a")) {
            return true;
        }
        if (localPort == 8082 && requestURI.startsWith("/b")) {
            return true;
        }

        Map<String, Object>  map = new HashMap<>();
        map.put("code", 404);
        map.put("success", false);
        map.put("message", "請求錯誤");
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(JSON.toJSONString(map));
        return false;
    }
}

攔截器的配置:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new MultiPortIntercpetor()).addPathPatterns("/**");
}

3.3 配置前綴

前兩天剛好介紹了configurePathMatch配置方法,那我們就用起來。

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.addPathPrefix("/a", clazz -> clazz.equals(FooController.class));
    configurer.addPathPrefix("/b", clazz -> clazz.equals(FooV2Controller.class));
}

這里的配置直接使用控制層的類,也可以通過自定義的注解獲取比對。

3.4 測試

04 小結(jié)

這是一個有意思的技術(shù)點。真實場景一般不會通過一個Tomcat控制兩套系統(tǒng)。而多端口真正的使用場景,小編暫時還想不到。大家都會用在什么地方,一起嘮嘮!

到此這篇關(guān)于SpringBoot同時監(jiān)聽多個端口的完整方法的文章就介紹到這了,更多相關(guān)SpringBoot監(jiān)聽端口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計模式之策略模式深入刨析

    Java設(shè)計模式之策略模式深入刨析

    策略模式屬于Java 23種設(shè)計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。本文將通過示例詳細(xì)講解這一模式,需要的可以參考一下
    2022-05-05
  • Java開發(fā)深入分析講解二叉樹的遞歸和非遞歸遍歷方法

    Java開發(fā)深入分析講解二叉樹的遞歸和非遞歸遍歷方法

    樹是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹中稱為結(jié)點)按分支關(guān)系組織起來的結(jié)構(gòu),很象自然界中的樹那樣。樹結(jié)構(gòu)在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機(jī)構(gòu)都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法
    2022-05-05
  • SpringMVC接收前臺傳遞過來的值的實例

    SpringMVC接收前臺傳遞過來的值的實例

    下面小編就為大家分享一篇SpringMVC接收前臺傳遞過來的值的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 如何理解Java線程池及其使用方法

    如何理解Java線程池及其使用方法

    線程池是首先創(chuàng)建一些線程,它們的集合稱為線程池。使用線程池可以提高性能,它在系統(tǒng)啟動時創(chuàng)建大量空閑的線程,程序?qū)⒁粋€任務(wù)傳給線程池,它就會啟動一條線程來執(zhí)行這個任務(wù),執(zhí)行結(jié)束以后,該線程并不會死亡,而是再次返回線程池中成為空閑狀態(tài),等待執(zhí)行下一個任務(wù)
    2021-06-06
  • Java中常用文本加解密工具類總結(jié)

    Java中常用文本加解密工具類總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java中常用的幾種文本加解密工具類,包括AES對稱加密、RSA非對稱加密、哈希算法加密和Base64編解碼,需要的可以參考下
    2024-11-11
  • java編程中自動拆箱與自動裝箱詳解

    java編程中自動拆箱與自動裝箱詳解

    這篇文章主要介紹了java編程中自動拆箱與自動裝箱詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java 中斷線程的幾種方式 interrupt()詳解

    java 中斷線程的幾種方式 interrupt()詳解

    中斷(Interrupt)一個線程意味著在該線程完成任務(wù)之前停止其正在進(jìn)行的一切,有效地中止其當(dāng)前的操作。這篇文章主要介紹了java 中斷線程的幾種方式 interrupt(),需要的朋友可以參考下
    2021-11-11
  • springboot設(shè)置多環(huán)境配置文件

    springboot設(shè)置多環(huán)境配置文件

    本文介紹了在Spring Boot項目中配置多個環(huán)境(如dev、test、prod)的方法,可以通過創(chuàng)建多個`.yml`文件來實現(xiàn),每個文件對應(yīng)一個環(huán)境,并在`application.yml`中指定激活的配置文件,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • 淺析我對 String、StringBuilder、StringBuffer 的理解

    淺析我對 String、StringBuilder、StringBuffer 的理解

    StringBuilder、StringBuffer 和 String 一樣,都是用于存儲字符串的。這篇文章談?wù)勑【帉tring、StringBuilder、StringBuffer 的理解,感興趣的朋友跟隨小編一起看看吧
    2020-05-05
  • JVM中的程序計數(shù)寄存器PC是什么詳解

    JVM中的程序計數(shù)寄存器PC是什么詳解

    這篇文章主要介紹了JVM中的程序計數(shù)寄存器PC原理分析,JVM中的程序計數(shù)寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存儲指令相關(guān)的現(xiàn)場信息
    2021-09-09

最新評論

承德市| 绍兴县| 灌云县| 丘北县| 墨竹工卡县| 高邑县| 老河口市| 林西县| 水城县| 乐陵市| 武定县| 通海县| 沙坪坝区| 星子县| 铁岭县| 庆阳市| 湖北省| 琼结县| 华池县| 铁力市| 会理县| 阿勒泰市| 炉霍县| 渑池县| 贵阳市| 庄河市| 饶平县| 临沂市| 乌审旗| 安丘市| 临海市| 汕尾市| 阳朔县| 海原县| 公安县| 洛川县| 长泰县| 宁陕县| 怀宁县| 河南省| 大埔区|