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

SpringBoot3.3中實現(xiàn)多端口監(jiān)聽的示例代碼

 更新時間:2024年11月08日 09:23:21   作者:bjzhang75  
在SpringBoot應(yīng)用中實現(xiàn)多端口監(jiān)聽,可以讓一個應(yīng)用處理不同類型的HTTP請求或暴露多個服務(wù)接口,本文詳細(xì)講解了通過配置application.yml文件和編寫自定義配置類的方法,實現(xiàn)了對多個端口的監(jiān)聽,感興趣的可以了解一下

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

運行效果:

1、項目環(huán)境與依賴配置

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

<?xml version="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>

2、配置多端口監(jiān)聽

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

server:
  port: 8080 # 主端口

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

3、編寫配置類實現(xiàn)多端口監(jiān)聽

在配置文件中指定了額外的端口后,我們需要編寫一個配置類,使用 Spring 的 EmbeddedWebServerFactoryCustomizer 來實現(xiàn)多端口監(jiān)聽。我們在 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 端口創(chuàng)建了獨立的 Spring 上下文,每個上下文對應(yīng)一個配置類(Port8081Config 和 Port8082Config),這些配置類會定義對應(yīng)端口下的控制器。

4、為每個端口創(chuàng)建獨立的配置類

現(xiàn)在,我們?yōu)槊總€端口創(chuàng)建獨立的配置類,這些配置類將會注冊相應(yīng)的控制器。

4.1 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();
    }
}

4.2 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();
    }
}

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

5、控制器類定義

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

5.1 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 的服務(wù)數(shù)據(jù)", headers, HttpStatus.OK);
        
    }
}

5.2 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 的服務(wù)數(shù)據(jù)", headers, HttpStatus.OK);
        
    }
}

5.3 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 的服務(wù)數(shù)據(jù)", headers, HttpStatus.OK);
        
    }
}

6、編寫前端頁面

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

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

7、視圖控制器實現(xiàn)

在 src/main/java/com/icoderoad/controller 目錄下創(chuàng)建一個簡單的控制器,用于處理 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";
    }
}

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

8、啟動與驗證

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

9、總結(jié)

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

到此這篇關(guān)于SpringBoot3.3中實現(xiàn)多端口監(jiān)聽的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot3.3 多端口監(jiān)聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SpringBoot中實現(xiàn)依賴注入功能

    詳解SpringBoot中實現(xiàn)依賴注入功能

    這篇文章主要介紹了詳解SpringBoot中實現(xiàn)依賴注入功能,SpringBoot的實現(xiàn)方式基本都是通過注解實現(xiàn)的。有興趣的可以了解一下。
    2017-04-04
  • SpringBoot Actuator埋點和監(jiān)控及簡單使用

    SpringBoot Actuator埋點和監(jiān)控及簡單使用

    最近做的項目涉及到埋點監(jiān)控、報表、日志分析的相關(guān)知識,于是搗鼓的一番,下面把涉及的知識點及SpringBoot Actuator埋點和監(jiān)控的簡單用法,給大家分享下,感興趣的朋友一起看看吧
    2021-11-11
  • Mybatis如何按順序查詢出對應(yīng)的數(shù)據(jù)字段

    Mybatis如何按順序查詢出對應(yīng)的數(shù)據(jù)字段

    這篇文章主要介紹了Mybatis如何按順序查詢出對應(yīng)的數(shù)據(jù)字段,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中的Object.getClass()方法解析

    Java中的Object.getClass()方法解析

    這篇文章主要介紹了Java中的Object.getClass()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • IntelliJ IDEA彈出“IntelliJ IDEA License Activation”的處理方法

    IntelliJ IDEA彈出“IntelliJ IDEA License Activation”的處理方法

    這篇文章主要介紹了IntelliJ IDEA彈出“IntelliJ IDEA License Activation”的處理方法,本文給出解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 用攔截器修改返回response,對特定的返回進行修改操作

    用攔截器修改返回response,對特定的返回進行修改操作

    這篇文章主要介紹了用攔截器修改返回response,對特定的返回進行修改操作。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 深入解析Java中的內(nèi)部類

    深入解析Java中的內(nèi)部類

    這篇文章主要介紹了Java中的內(nèi)部類,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-07-07
  • Java實現(xiàn)簡易版猜燈謎游戲的示例代碼

    Java實現(xiàn)簡易版猜燈謎游戲的示例代碼

    燈謎是中秋節(jié)傳統(tǒng)的活動之一,而現(xiàn)代化的方式則是將其制作成一個小游戲,讓用戶在游戲的過程中猜燈謎,互動體驗更佳,所以本文小編就用Java制作一款猜燈謎小游戲吧
    2023-09-09
  • 詳解hbase與hive數(shù)據(jù)同步

    詳解hbase與hive數(shù)據(jù)同步

    這篇文章主要介紹了詳解hbase與hive數(shù)據(jù)同步的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • 詳解Spring事務(wù)回滾的兩種方法

    詳解Spring事務(wù)回滾的兩種方法

    Spring事務(wù)回滾的前提是你當(dāng)前使用的數(shù)據(jù)庫必須支持事務(wù),比如MySQL的Innodb是支持的,但Mysaim則是不支持事務(wù)的,本文就給大家介紹兩種Spring事務(wù)回滾的方法,需要的朋友可以參考下
    2023-07-07

最新評論

西青区| 红桥区| 宜兰县| 屯昌县| 扎鲁特旗| 汉沽区| 乌鲁木齐县| 武胜县| 色达县| 常山县| 饶河县| 沽源县| 阿勒泰市| 仁布县| 潜山县| 江源县| 道孚县| 惠东县| 颍上县| 建水县| 皮山县| 奉化市| 兴山县| 大新县| 彭水| 汝南县| 石阡县| 高清| 将乐县| 靖江市| 兴国县| 馆陶县| 历史| 安泽县| 阜新| 南昌市| 即墨市| 安塞县| 凤山市| 犍为县| 仙游县|