Spring boot - 如何获取正在运行的端口和IP地址[重复]

Posted

技术标签:

【中文标题】Spring boot - 如何获取正在运行的端口和IP地址[重复]【英文标题】:Spring boot - how to get running port and ip address [duplicate] 【发布时间】:2019-01-08 18:26:57 【问题描述】:

我在启动 Spring Boot 应用程序时通过 shell 脚本传递端口。想知道如何获取应用程序中运行的端口和系统ip地址打印到日志文件中。

脚本: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9890

【问题讨论】:

你在哪里paasing正在运行的端口?它在脚本里面吗?最后,当你说想知道时,你想知道哪里?在您的应用程序内部还是外部? IP地址部分:***.com/questions/9481865/… 【参考方案1】:

当你从脚本传递任何参数时,你可以在运行时得到这个:

private String jmxRemote = System.getProperty("com.sun.management.jmxremote"); 
private String jmxRemotePort = System.getProperty("com.sun.management.jmxremote.port");

获取 JVM 本身或您可能拥有的任何 -D 选项的属性 在命令行传递

获取ip:

// for example 127.0.0.1 is localhost ip
private String ip = InetAddress.getLoopbackAddress().getHostAddress();

获取端口:

@Value("$local.server.port")
private int serverPort;

或通过:

@LocalServerPort
private int serverPort;

或通过:

@Autowired
private Environment environment;

public void doWork()
    String serverPort = environment.getProperty("local.server.port");
    // do something

您还可以从环境中获取所有属性 - JVM / 系统 / 环境 / 所有传递的参数

【讨论】:

getLoopbackAddress() 可能不是人们想要的。 也许,“和系统IP地址”——这里是什么意思? 在最新的 spring-boot 中是 $server.port【参考方案2】:

如果您想在应用程序运行后获取它,请尝试以下操作:

@Component
public class ApplicationLoader implements ApplicationRunner 

    @Autowired
    private Environment environment;

    @Override
    public void run(ApplicationArguments args) throws Exception 
        System.out.println(environment.getProperty("java.rmi.server.hostname"));
        System.out.println(environment.getProperty("local.server.port"));
        System.out.println(InetAddress.getLocalHost().getHostAddress());
    

您可以通过多种方式获取端口:

@Value("$local.server.port")
private int serverPort;

@LocalServerPort
private int serverPort;

【讨论】:

【参考方案3】:

您可以通过以下方式在任何组件类中自动连接端口号

// Inject which port we were assigned
@Value("$local.server.port")
int port;

或者用注解@LocalServerPort

@LocalServerPort
private int port;

主机地址如下

String ip = InetAddress.getLocalHost().getHostAddress()

【讨论】:

请注意,OP 请求的是 JMX 端口,而不是 @LocalServerPort LocalServerPort 是一个魅力 :) 没有比这更容易的了。请记住,这仅从 Spring Boot 2.0.0 开始可用。 docs.spring.io/spring-boot/docs/current/api/org/springframework/…

以上是关于Spring boot - 如何获取正在运行的端口和IP地址[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口

如何在运行时获取 SPRING Boot HOST 和 PORT 地址?

如何在端口 443 上运行 Spring Boot

Spring Boot Test 无法使用 LocalServerPort 注释自动连接端口

如何获取spring boot application.yml里面的值

如何使用 Spring Boot 应用程序和 Spock 测试在运行时更改服务器端口