Spring Boot 改端口不生效

介绍

在使用 Spring Boot 进行开发时,有时候需要更改应用的端口号。但是有些开发者在更改端口号后却发现改动不生效,仍然使用默认的端口号启动应用。本文将分步骤介绍如何正确地改变 Spring Boot 应用的端口号。

整体步骤

下面是整个过程的步骤概览:

步骤 描述
1 在 application.properties 文件中添加配置
2 创建一个新的配置类
3 使用 @Value 注解注入配置值
4 关闭默认的端口号配置

接下来我们将详细介绍每个步骤应该做什么。

步骤 1:在 application.properties 文件中添加配置

首先,需要在 application.properties 文件中添加一个配置来指定要使用的端口号。打开 src/main/resources 目录下的 application.properties 文件(如果不存在则新建一个),并添加以下内容:

server.port=8081

这里的 server.port 属性设置为 8081,你可以根据需要更改成其他端口号。

步骤 2:创建一个新的配置类

接下来,我们需要创建一个新的配置类,用于加载 application.properties 文件中的配置。在 src/main/java 目录下创建一个新的包(比如 com.example.config),然后在该包中创建一个新的类(比如 ServerConfig)。代码如下:

package com.example.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "server")
public class ServerConfig {

    private int port;

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}

步骤 3:使用 @Value 注解注入配置值

然后,在需要使用端口号的地方,使用 @Value 注解将配置值注入到相应的属性中。比如,假设有一个 HomeController 类,需要获取端口号并进行相关处理。代码如下:

package com.example.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HomeController {

    @Value("${server.port}")
    private int port;

    @GetMapping("/")
    @ResponseBody
    public String home() {
        return "当前端口号:" + port;
    }
}

在以上示例中,使用 @Value("${server.port}") 注解将配置值注入到 port 属性中。

步骤 4:关闭默认的端口号配置

最后,我们需要关闭 Spring Boot 默认的端口号配置。在 ServerConfig 类中添加以下内容:

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ServerConfig {

    // ...

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> containerCustomizer() {
        return (container -> container.setPort(0));
    }
}

以上代码创建了一个 WebServerFactoryCustomizer Bean,用于定制 Tomcat 容器的配置,将端口号设置为 0,表示随机分配一个可用的端口号。

类图

下面是类图的表示:

classDiagram
    class HomeController {
        -int port
        +home()
    }
    class ServerConfig {
        -int port
        +getPort(): int
        +setPort(port: int): void
        +containerCustomizer(): WebServerFactoryCustomizer<TomcatServletWebServerFactory>
    }
    HomeController -- ServerConfig

以上就是正确改变 Spring Boot 应用端口号的步骤和代码。通过按照以上步骤进行配置,你可以成功更改应用的端口号并使其生效。希望对你有所帮助!