JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java项目获取系统端口号

wys521 2025-03-05 22:22:41 精选教程 45 ℃ 0 评论

在 Java项目中,可以通过多种方式获取当前应用的端口号。以下是几种常见的方法:

1、通过 Environment 获取端口号

在应用程序的运行时需要动态获取端口号,可以通过 Environment 对象来获取当前配置的端口号。Spring Boot 将 server.port 属性自动加载到环境变量中。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.context.WebServerApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class PortFetcher {

    @Autowired
    private WebServerApplicationContext webServerAppContext;

    public int getPort() {
        return webServerAppContext.getWebServer().getPort();
    }
}

在上述代码中,我们通过
WebServerApplicationContext 获取当前 Web 服务器的端口号。如果你在 Spring Boot 项目中使用的是内嵌的 Tomcat、Undertow,getPort() 方法将返回实际使用的端口号。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

//项目启动的时候就可以获取端口号
@Component
public class StartupRunner {

    @Autowired
    private Environment env;

    @PostConstruct
    public void runAfterStartup() {

        //获取项目启动的端口号
        String portNo = env.getProperty("server.port", String.class);
        //根据端口号,查询该网管相关的信息
        logger.info("portNo = "+portNo+"===");
    }

2、通过 ServletContext 来获取当前应用绑定的端口号:

import org.springframework.stereotype.Component;
import javax.servlet.ServletContext;

@Component
public class PortFetcher {

    private final ServletContext servletContext;

    public PortFetcher(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    public String getServerPort() {
        return servletContext.getServerInfo();
    }
}

3、如果只是想获取配置文件中设置的端口号,可以通过 @Value 注解将配置文件中的值注入到 Spring Bean 中:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class PortFetcher {

   //@Value("${server.port}") 会将配置文件中 server.port 的值注入到 port 变量中
    @Value("${server.port}")
    private int port;

    public int getPort() {
        return port;
    }
}

4、通过 ServerProperties 获取端口号

import org.springframework.boot.web.server.WebServer;
import org.springframework.boot.web.server.WebServerApplicationContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class PortFetcher {

    @Autowired
    private WebServerApplicationContext context;

    public int getPort() {
      //WebServerApplicationContext 提供了一个 getWebServer() 方法,
      //返回一个 WebServer 对象。通过该对象,可以获取当前应用的端口号。
        WebServer webServer = context.getWebServer();
        return webServer.getPort();
    }
}

5、使用 ApplicationListener 获取端口号

Spring Boot 应用启动时,通过 ApplicationListener 获取端口号。使用
ApplicationEnvironmentPreparedEvent 或 ApplicationReadyEvent 来捕获应用启动后获取端口号。

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class PortFetcher implements ApplicationListener {

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        System.out.println("The application is running on port: " + event.getApplicationContext().getEnvironment().getProperty("server.port"));
    }
}

总结:以上为在程序中动态获取端口号的方法,在实际应用中选择更贴切业务需求的方式;

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表