国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SpringBoot3.3 中如何實現多端口監聽

開發 前端
Spring通過本文的詳細講解,我們學習了如何在 SpringBoot 中實現多端口監聽。這一功能在處理不同類型的請求或暴露多個服務接口時非常有用。我們通過配置 application.yml 文件和編寫自定義配置類,結合前端展示,實現了這一功能。

在 SpringBoot 應用中,通常情況下,我們只需要監聽一個端口來處理 HTTP 請求。但在某些情況下,我們可能需要在同一個應用中監聽多個端口,例如分別處理不同類型的請求,或者在同一個應用中暴露多個服務接口。本篇文章將詳細講解如何在 SpringBoot 中實現多端口監聽,并結合代碼示例進行深入講解。

運行效果:

圖片圖片

若想獲取項目完整代碼以及其他文章的項目源碼,且在代碼編寫時遇到問題需要咨詢交流,歡迎加入下方的知識星球。

項目環境與依賴配置

首先,我們需要創建一個 SpringBoot 項目,并確保項目中包含必要的依賴。以下是 pom.xml的配置:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.icoderoad</groupId>
	<artifactId>multi-port-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>multi-port-demo</name>
	<description>Demo project for Spring Boot</description>
	
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		
		<!-- Spring Boot Web Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- Thymeleaf 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

配置多端口監聽

在 SpringBoot 中,通過配置 application.yml 文件可以輕松實現多端口監聽。以下是配置示例:

server:
  port: 8080 # 主端口

# 額外的端口配置
additional-ports:
  - 8081
  - 8082

編寫配置類實現多端口監聽

在配置文件中指定了額外的端口后,我們需要編寫一個配置類,使用 Spring 的 EmbeddedWebServerFactoryCustomizer 來實現多端口監聽。我們在 MultiPortConfig 類中為每個端口配置一個獨立的 Spring 上下文。

package com.icoderoad.multi_port_demo.config;

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MultiPortConfig {

    @Bean
    public ServletWebServerFactory servletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addAdditionalTomcatConnectors(createConnector(8081)); // Add additional port 8081
        factory.addAdditionalTomcatConnectors(createConnector(8082)); // Add additional port 8082
        return factory;
    }

    private Connector createConnector(int port) {
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setPort(port);
        return connector;
    }
}

在這個配置類中,createAndStartContext 方法為 8081 和 8082 端口創建了獨立的 Spring 上下文,每個上下文對應一個配置類(Port8081Config 和 Port8082Config),這些配置類會定義對應端口下的控制器。

為每個端口創建獨立的配置類

現在,我們為每個端口創建獨立的配置類,這些配置類將會注冊相應的控制器。

8081 端口配置類

package com.icoderoad.multi_port_demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import com.icoderoad.multi_port_demo.controller.Port8081Controller;

@Configuration
@EnableWebMvc
public class Port8081Config {

    @Bean
    public Port8081Controller port8081Controller() {
        return new Port8081Controller();
    }
}

8082 端口配置類

package com.icoderoad.multi_port_demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import com.icoderoad.multi_port_demo.controller.Port8082Controller;

@Configuration
@EnableWebMvc
public class Port8082Config {

    @Bean
    public Port8082Controller port8082Controller() {
        return new Port8082Controller();
    }
}

這些配置類會在相應的端口上下文中注冊對應的控制器。

控制器類定義

定義控制器類,每個控制器類對應一個端口,之前的控制器定義無需改變:

8080 端口的控制器(保持原有配置)

package com.icoderoad.multi_port_demo.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Port8080Controller {

    @GetMapping("/port8080/service")
    public ResponseEntity<String>  service() {
    	
    	HttpHeaders headers = new HttpHeaders();
        headers.setContentType(org.springframework.http.MediaType.TEXT_PLAIN);
        headers.set(HttpHeaders.CONTENT_TYPE, "text/plain; charset=UTF-8");
        
        return new ResponseEntity<>("端口 8080 的服務數據", headers, HttpStatus.OK);
        
    }
}

8081 端口的控制器

package com.icoderoad.multi_port_demo.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Port8081Controller {

	@CrossOrigin(origins = "http://localhost:8080") // 允許的前端地址
    @GetMapping("/port8081/service")
	public ResponseEntity<String>  service() {
    	
    	HttpHeaders headers = new HttpHeaders();
        headers.setContentType(org.springframework.http.MediaType.TEXT_PLAIN);
        headers.set(HttpHeaders.CONTENT_TYPE, "text/plain; charset=UTF-8");
        
        return new ResponseEntity<>("端口 8081 的服務數據", headers, HttpStatus.OK);
        
    }
}

8082 端口的控制器

package com.icoderoad.multi_port_demo.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Port8082Controller {

	@CrossOrigin(origins = "http://localhost:8080") // 允許的前端地址
    @GetMapping("/port8082/service")
	public ResponseEntity<String>  service() {
    	
    	HttpHeaders headers = new HttpHeaders();
        headers.setContentType(org.springframework.http.MediaType.TEXT_PLAIN);
        headers.set(HttpHeaders.CONTENT_TYPE, "text/plain; charset=UTF-8");
        
        return new ResponseEntity<>("端口 8082 的服務數據", headers, HttpStatus.OK);
        
    }
}

編寫前端頁面

在 src/main/resources/templates 目錄下創建一個簡單的 index.html 頁面,使用 Thymeleaf 和 Bootstrap 進行前端展示。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>SpringBoot 多端口監聽</title>
   <link  rel="stylesheet">
</head>
<body>
<div class="container">
    <h1 class="mt-5">SpringBoot 多端口監聽示例</h1>
    <p class="lead">此應用監聽多個端口,分別處理不同的請求。</p>
    <p>主端口:8080</p>
    <p>額外端口:8081, 8082</p>
    
    <div class="row">
        <div class="col-md-4">
            <h3>端口 8080 數據</h3>
            <p id="data-8080">加載中...</p>
        </div>
        <div class="col-md-4">
            <h3>端口 8081 數據</h3>
            <p id="data-8081">加載中...</p>
        </div>
        <div class="col-md-4">
            <h3>端口 8082 數據</h3>
            <p id="data-8082">加載中...</p>
        </div>
    </div>
</div>

<script>
    fetch('http://localhost:8080/port8080/service')
        .then(response => response.text())
        .then(data => {
            document.getElementById('data-8080').textContent = data;
        });

    fetch('http://localhost:8081/port8081/service')
        .then(response => response.text())
        .then(data => {
            document.getElementById('data-8081').textContent = data;
        });

    fetch('http://localhost:8082/port8082/service')
        .then(response => response.text())
        .then(data => {
            document.getElementById('data-8082').textContent = data;
        });
</script>
</body>
</html>

視圖控制器實現

在 src/main/java/com/icoderoad/controller 目錄下創建一個簡單的控制器,用于處理 HTTP 請求。

package com.icoderoad.multi_port_demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {

    @GetMapping("/")
    public String index() {
        return "index";
    }
}

上述代碼中,我們創建了一個簡單的控制器類,提供了一個主頁和一個返回監聽端口信息的接口。

啟動與驗證

啟動 SpringBoot 應用后,在瀏覽器中訪問 http://localhost:8080、http://localhost:8081 和 http://localhost:8082,你會發現所有端口都可以正常響應請求,說明我們已經成功實現了多端口監聽。

總結

通過本文的詳細講解,我們學習了如何在 SpringBoot 中實現多端口監聽。這一功能在處理不同類型的請求或暴露多個服務接口時非常有用。我們通過配置 application.yml 文件和編寫自定義配置類,結合前端展示,實現了這一功能。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2024-09-02 08:17:18

2024-08-30 11:28:09

2024-09-06 10:05:47

SpELSpring權限

2024-09-03 10:44:32

2024-03-18 08:48:52

Spring多端認證微服務

2024-09-09 11:35:35

2024-09-05 09:35:58

CGLIBSpring動態代理

2013-02-20 09:59:49

負載均衡PuppetNginx

2024-09-13 10:21:50

2024-09-26 09:28:06

內存Spring

2024-10-15 10:38:32

2024-10-18 11:32:15

2024-10-11 11:46:40

2010-03-17 16:35:11

2024-10-16 12:23:55

技巧Spring驗證

2010-09-17 09:40:16

2024-08-26 09:15:55

RedissonMyBatisSpring

2024-09-26 08:48:42

SpringAPITogglz

2024-10-07 08:18:05

SpringBOM管理

2010-01-19 10:31:20

思科交換機模塊
點贊
收藏

51CTO技術棧公眾號

91精品成人| 精品国产百合女同互慰| 欧美极品一区二区| 国产成人久久| 草民午夜欧美限制a级福利片| sm性调教片在线观看| 精品动漫一区二区三区| 992tv在线观看在线播放| 精品国产免费人成网站| 欧美日韩在线播| 精品久久久久久中文字幕动漫| 精品视频日韩| 国产大片精品免费永久看nba| 亚洲国产视频二区| 久久精品视频在线观看| 自拍偷拍亚洲图片| 一道本无吗dⅴd在线播放一区| 欧美7777| 亚洲精品自产拍| a日韩av网址| 亚洲男女性事视频| 天堂久久午夜av| zzijzzij亚洲日本成熟少妇| 国产人与zoxxxx另类91| 欧美富婆性猛交| 日本国产精品| 国产欧美在线看| 午夜精品久久| 久久久久久久久久久久久9999| 亚洲综合丁香| 中文字幕一区二区三区在线乱码 | 亚洲精品小视频| 欧美男女交配| 久久久极品av| 国产一区二区三区四区大秀| 91成人免费视频| 日韩av电影天堂| 日本免费成人网| 91在线免费视频观看| 91免费视频网站| 上原亚衣av一区二区三区| 亚洲成人影院麻豆| 日韩情涩欧美日韩视频| av有声小说一区二区三区| 九九热精品视频| 日韩电影一区| 日本一区二区三区视频免费看| 夫妻av一区二区| 黄色漫画在线免费观看| 欧美日韩中文字幕日韩欧美| 成人性生交大片免费看网站| 欧美人交a欧美精品| 国产精品福利在线观看播放| 亚洲午夜精品一区二区三区| 国产午夜精品理论片a级大结局| 四虎在线视频| 中文字幕亚洲第一| 99精品视频精品精品视频| 在线码字幕一区| 成人免费视频在线观看| 亚洲综合图区| 欧美中文在线字幕| 蜜臀av一级做a爰片久久| 18av网站| 日韩精品视频免费专区在线播放| 香蕉国产成人午夜av影院| 日产中文字幕在线精品一区| 中文字幕在线一区免费| 久久久123| 国产啪精品视频| 成人网页在线观看| 福利视频在线看| 欧美日本亚洲视频| 日日夜夜免费精品| 成视频在线观看免费观看| 日韩女优av电影| 欧美裸体在线版观看完整版| 青草全福视在线| 欧美性xxxxx极品| 亚洲不卡在线| 中文字幕中文字幕一区三区| 图片区小说区国产精品视频| 精品美女一区| 日本一区免费在线观看| 亚洲午夜在线视频| 日韩三级一区| 亚洲自拍三区| 色素色在线综合| 精品精品国产毛片在线看| 91视频成人免费| 欧美中文字幕不卡| 欧美理论在线播放| 国产精品视频分类| 在线观看精品国产视频| 亚洲一区日韩在线| 日本一二三区在线视频| 97视频免费观看| 国产suv精品一区二区6| 黄网站在线免费| 国产精品主播视频| 国产欧美一区二区在线| 国产精品久久久久av电视剧| 美国av一区二区三区| 欧美午夜激情小视频| 伊人久久大香线蕉综合网站| 不要播放器的av网站| 国产一区二区三区在线观看网站 | 黄色在线免费| 成人夜晚看av| 国产精品成人免费精品自在线观看| 欧美男男tv网站在线播放| 国产精品一区视频| 色综合视频在线观看| 免费观看不卡av| 在线观看成人影院| 久久久久久有精品国产| 97超碰欧美中文字幕| 欧美精选视频一区二区| 最近免费观看高清韩国日本大全| 欧美一区二区三区色| 在线亚洲精品| 日本天堂在线观看| 国产伦一区二区三区色一情| 色欧美乱欧美15图片| 欧美激情亚洲| 色多多视频在线观看| 欧美性bbwbbwbbwhd| 日韩欧美国产综合一区 | 欧美久久电影| 91麻豆精品91久久久久同性| 亚洲黄色免费| 日本电影在线观看网站| 精品国产乱码久久久久软件 | 1769在线观看| 精品久久久久久综合日本| 欧美日韩国产在线观看| 国产免费成人| 24小时免费看片在线观看| 视频二区一区| 亚洲男人的天堂在线| 成人深夜在线观看| 日韩精品成人| 国产一级电影网| 国产精品国内视频| 色哟哟一区二区| 美女91精品| 台湾佬成人网| 国产福利一区视频| 国产成人91久久精品| 狠狠躁夜夜躁人人躁婷婷91 | 中文字幕一区二区三区乱码在线 | 国产精品99久久久久久久vr| 美女视频一区| 国产对白国语对白| 成人免费网站在线| 91精品国产综合久久精品性色 | 秋霞在线观看一区二区三区| 日韩国产高清视频在线| 久久久亚洲精品石原莉奈| 国产成人精品三级高清久久91| 久久电影中文字幕| 亚洲欧美丝袜| 欧美国产视频日韩| 黑人巨大精品欧美一区二区三区| 久久婷婷久久| 中文字幕一区二区三区中文字幕| 中文字幕一二三区在线观看| 欧美激情导航| 九九精品在线视频| 在线观看亚洲精品视频| 国产精品99久久久| 国产一区二区电影在线观看| a级网站在线播放| 37pao成人国产永久免费视频| 国产主播喷水一区二区| 亚洲精品久久久一区二区三区 | 午夜亚洲伦理| 福利一区和二区| 一区二区三区区四区播放视频在线观看| 狠狠色伊人亚洲综合网站色| 中文字幕亚洲欧美日韩在线不卡 | 五丁香在线视频| 中文字幕日韩精品久久| 久久99国产精品久久久久久久久| 色婷婷综合激情| 成人精品视频一区二区三区尤物| 日韩dvd碟片| 成人免费一区| 北条麻妃在线| 欧美自拍小视频| 久久免费99精品久久久久久| 欧美激情二区三区| 欧美一区二区在线观看| 国产精品女主播av| 久久99精品久久久久久国产越南| 日韩av久操| 日韩区一区二| 日本免费一区二区六区| 青草久久伊人| 麻豆传传媒久久久爱|