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

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

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

01 引言

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

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

02 場(chǎng)景假設(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

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

03 問題解決

3.1 開發(fā)多接口

我們先不管端口的分配,我們先看看能不能開方多個(gè)接口。當(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兩個(gè)接口。這兩個(gè)接口不影響默認(rèn)端口,加上默認(rèn)端口8080總共有3個(gè)端口可以同時(shí)訪問。

Java測(cè)試

@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

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

3.2 端口分配

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

假設(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", "請(qǐng)求錯(cuò)誤");
        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));
}

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

3.4 測(cè)試

04 小結(jié)

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

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

相關(guān)文章

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

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

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

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

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

    SpringMVC接收前臺(tái)傳遞過來的值的實(shí)例

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

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

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

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

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

    java編程中自動(dòng)拆箱與自動(dòng)裝箱詳解

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

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

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

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

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

    淺析我對(duì) String、StringBuilder、StringBuffer 的理解

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

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

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

最新評(píng)論

桃园县| 孟州市| 高密市| 大足县| 大丰市| 伽师县| 博白县| 郓城县| 岳普湖县| 永年县| 普定县| 扎兰屯市| 师宗县| 章丘市| 大关县| 米泉市| 鸡泽县| 长春市| 宁海县| 社旗县| 武宣县| 昭平县| 思茅市| 宣威市| 潞西市| 富宁县| 弥渡县| 田东县| 汉寿县| 桐柏县| 萍乡市| 龙泉市| 厦门市| 临海市| 汾阳市| 怀安县| 柳河县| 忻州市| 长泰县| 西青区| 彝良县|