如何为Spring Boot应用程序配置端口


796

如何配置Spring Boot应用程序侦听的TCP / IP端口,因此它不使用默认端口8080。


5
如果有人有兴趣,这里展示了如何有多个端口- stackoverflow.com/questions/36357135/...
Betlista

如果使用“ yml”文件进行配置,则可以使用以下服务器:端口:8081还将主类注释为“ @SpringBootApplication”,并删除@ EnableAutoConfiguration
Keaz

您的项目[application.properties]用于添加server.port = 8080
Lahiru Samishka,

server.port=8080在应用程序属性中设置。此配置在的ServerProperties.class类下org.springframework.boot.autoconfigure.web
阿提夫

Answers:


1225

正如在所述的文档任一组server.port使用命令行选项来JVM中的系统属性-Dserver.port=8090或添加application.properties/src/main/resources/

server.port=8090

对于随机端口使用

server.port=0

47
当使用随机端口时,端口信息可以通过@Value("${local.server.port}")
azizunsal

42
实际上,命令行选项是--server.port = 8090而不是-Dserver.port = 8090。docs.spring.io/spring-boot/docs/current/reference/html/...
OPSTER ES忍者- Alper的

1
作为对此答案的补充:根据spring文档,您可以采用其他方法application.properties。就我而言,这很有帮助。
sargas

14
-Dserver.port = XXXX对我不起作用。我使用了OS环境变量模式: $ SERVER_PORT=8090 java -jar <path/to/my/jar>
Soumya Kanti 2015年

10
(1)java -Dserver.port=XXXX -jar <path/to/my/jar>和(2)均java -jar <path/to/my/jar> --server.port=YYYY有效。第一个命令定义server.port系统属性,第二个命令通过命令行参数(String... argsmain方法中)传递属性。此外,如果您使用进行运行java -Dserver.port=XXXX -jar <path/to/my/jar> --server.port=YYYYYYYY则优先于XXXX,这就是Spring Boot外部化配置如此迷人的原因。
tan9 '16

209

在Spring Boot应用程序中,有两种主要方法可以更改嵌入式Tomcat中的端口。

修改application.properties

首先,您可以尝试/ resources文件夹中的application.properties文件:

server.port = 8090

application.properties文件

修改虚拟机选项

第二种方法,如果要避免修改任何文件并检入只在本地需要的文件,则可以使用vm arg:

转到运行->编辑配置-> VM选项

-Dserver.port=8090

使用vm arg更改端口

另外,如果您需要更多信息,则可以在此处查看以下博客文章: 更改Spring Boot应用程序上的端口


在STS 4中,它在运行->运行配置->主,然后向下滚动到带有参数名称和值的表
serv-inc

155

由于Spring Boot提供了各种配置外部化机制(通过各种PropertySource实现和/或Environment按顺序连接到对象的处理器),因此您可以通过以下方法在jar存档之外设置任何属性:

  1. 通过命令行参数传递属性作为应用程序参数

    java -jar <path/to/my/jar> --server.port=7788
  2. 来自SPRING_APPLICATION_JSON(Spring Boot 1.3.0+)中的属性

    • 在U * IX shell中定义环境变量:

      SPRING_APPLICATION_JSON='{"server.port":7788}' java -jar <path/to/my/jar>
    • 通过使用Java系统属性:

      java -Dspring.application.json='{"server.port":7788}' -jar <path/to/my/jar>
    • 通过命令行参数传递:

      java -jar <path/to/my/jar> --spring.application.json='{"server.port":7788}'
  3. 定义JVM系统属性

    java -Dserver.port=7788 -jar <path/to/my/jar>
  4. 定义操作系统环境变量

    • U * IX外壳

      SERVER_PORT=7788 java -jar <path/to/my/jar>
    • 视窗

      SET SERVER_PORT=7788
      java -jar <path/to/my/jar>
  5. 将属性放置在./config/application.properties 配置文件中

    server.port=7788

    并运行:

     java -jar <path/to/my/jar>
  6. 将财产放在 ./config/application.yaml

    server:
        port: 7788

    并运行:

     java -jar <path/to/my/jar>
  7. 将财产放在 ./application.properties

    server.port=7788

    并运行:

     java -jar <path/to/my/jar>
  8. 将财产放在 ./application.yaml

    server:
        port: 7788

    并运行:

     java -jar <path/to/my/jar>

您可以将上述方法全部组合在一起,列表中的前一种配置优先于后一种。

例如:

SERVER_PORT=2266 java -Dserver.port=5566 -jar <path/to/my/jar> --server.port=7788

服务器将启动并在端口7788上侦听。

这在提供较低优先级的PropertySources中的默认属性(通常打包在存档中或在源代码中),然后在运行时环境中覆盖它时非常有用。这是Spring Boot的设计理念:

开箱即用,但由于需求开始与默认值有所出入,因此请尽快避开。


SERVER_NAMEserver.name转化所做轻松绑定


108

此外,您可以通过编程方式配置端口

@Configuration
public class ServletConfig {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return (container -> {
            container.setPort(8012);
        });
    }
}

当您在自己的配置文件中有端口并希望在运行时进行设置时,此方法非常有用且非常有用。
Xdg

4
当我需要将应用程序部署到AWS Elastic Beanstalk服务以从环境变量获取端口时,这很有用。
马丁·汉森

当您只需要一个独立的单元或集成测试+1时,这将非常有用。
Priidu Neemre '16

当已经使用不同的名称定义了端口的env变量时,此功能非常有用。
higuaro

2
Is'nt它@Configuration来代替@Controller?如果是,请更新。
幸运

82

您可以在Java代码中设置端口:

HashMap<String, Object> props = new HashMap<>();
props.put("server.port", 9999);

new SpringApplicationBuilder()
    .sources(SampleController.class)                
    .properties(props)
    .run(args);

或在application.yml中:

server:
    port: 9999

或在application.properties中:

server.port=9999

或作为命令行参数:

-Dserver.port=9999

仅当在applications.properties或.yml中未设置任何端口时,才可以使用HashMap。
米尔戈

79

如果您想在本地运行,请使用此-

mvn spring-boot:run -Drun.jvmArguments='-Dserver.port=8085'

Spring Boot 2.0开始,这是有效的命令(线索在此处):

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085

1
从Spring Boot 2开始,您应该使用spring-boot.run.jvmArguments
mapm 18'Apr

54

如果您正在使用application.yml,请在其中添加以下几行

server:
     port: 9000

对于随机端口,当然是0。


1
这似乎没有用。我在application.yml中使用server.port,它起作用了
yathirigan

47

Spring文档中所述,有几种方法可以做到这一点:

您可以在命令行中设置端口(例如8888)

-Dserver.port=8888 要么 --server.port=8888

范例: java -jar -Dserver.port=8888 test.jar

或者您在application.properties中设置端口

server.port=${port:4588}

或(在具有yaml语法的application.yml中)

server:
   port: ${port:4588}

如果在命令行中设置了-Dport传递的端口(或-Dserver.port),则将考虑该端口。如果不是,则默认端口为4588。

如果要在属性文件中强制使用任何环境变量的端口,则只需编写以下代码:

server.port=8888


23

如果需要以编程方式进行操作,可以在启动过程中进行设置:

System.getProperties().put( "server.port", 80 );
SpringApplication.run(App.class, args);

这可能对诸如依赖环境的端口之类的事情有所帮助。祝你今天愉快


2
System.setProperty("server.port", 80);是达到相同目的的另一种方法。
hd1

@ hd1,我已将我们的答案添加到主要答案中,进行检查并根据需要进行修改
Luis Mauricio

18

您可以通过覆盖EmbeddedServletContainerFactory配置中的bean(基于Java或xml)来指定端口。您可以在此处为使用的嵌入式Servlet容器指定端口。请参阅Spring Boot-Core “嵌入式Servlet容器支持”段落和示例。希望这可以帮助。



这是指向程序性替代部分的当前链接:docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…–
jocull


17

扩展其他答案:

文档中有一个用于测试的部分,说明了如何在集成测试中配置端口:


在集成测试中,使用注释@SpringBootTestwebEnvironment值进行端口配置。


随机端口:

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

您可以使用注入@LocalServerPort与相同的值@Value("${local.server.port}")

  • 例:

随机端口测试配置:

@RunWith(SpringRunner.class
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class ExampleTest {
   ...
   @LocalServerPort //to inject port value
   int port;
}

定义的端口:

@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

它从server.portif定义中获取值。

  • 如果使用定义了@TestPropertySource(properties = "server.port=9192"),则它将覆盖其他定义的值。
  • 如果不是,则从src/test/resources/application.properties(如果存在)中获取值。
  • 最后,如果未定义,则以default开头8080

例:

定义的端口测试配置:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource(properties = "server.port=9192")
public class DemoApplicationTests {

    @Test
    public void contextLoads() {
    }

}

17

当Spring Boot应用程序启动时,嵌入式服务器(例如Tomcat)将使用默认端口启动。嵌入式tomcat默认以8080端口开头。有许多更改默认服务器端口的方法。

使用属性文件(.properties / .yml)

要使用属性文件更改服务器端口,我们需要配置server.port属性。

一个。在类路径中使用application.properties,例如 src \ main \ resources \ application.properties

server.port = 8585

服务器将以8585端口启动。要获得随机服务器端口,请将0分配给该属性。

server.port = 0

现在,spring boot将在系统中任何服务器当前未使用的端口上启动服务器。

b。在类路径(例如 src \ main \ resources \ application.yml)中使用application.yml。

server:
  port: 8585 

服务器将以8585端口启动。

对于随机端口,请分配0。

server:
  port: 0 

将Java命令与--server.port或-Dserver.port一起使用

假设我们有一个名为my-app.jar的可执行JAR,然后在使用java命令启动spring boot应用程序时,可以使用如下参数。

使用--server.port

java -jar my-app.jar  --server.port=8585

使用-Dserver.port

java -jar -Dserver.port=8585 my-app.jar

服务器将以8585端口启动。

简而言之,将Java命令与--port或-Dport一起使用

为了简写--server.port和-Dserver.port,我们可以删除server关键字并将其设为任何短关键字,例如--port和-Dport。我们可以使用任何短关键字。在这里,我们使用port作为short关键字。为此,我们需要在属性文件中配置占位符,如下所示。

使用application.properties

server.port=${port:8282}

使用application.yml

server:
   port: ${port:8282}

如果我们不将端口作为参数传递,则默认情况下,服务器将从8282开始。如果我们需要其他端口,则需要按如下所示在参数中传递所需的端口。假设我们有一个名为my-app.jar的可执行JAR。

使用--port

java -jar my-app.jar --port=8585 

使用-Dport

java -jar -Dport=8585 my-app.jar 

服务器将以8585端口启动。

通过编程将SERVER_PORT与SpringApplication一起使用

SpringApplication有一个方法setDefaultProperties(),用于更改Spring Boot的默认属性。假设我们要更改默认端口,那么我们需要创建一个Map并使用SERVER_PORT键放置一个端口。查找示例。

MyApplication.java

package com.humoyun;

import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(MyApplication.class);
        Map<String, Object> map = new HashMap<>();
        map.put("SERVER_PORT", "8585");
        application.setDefaultProperties(map);
        application.run(args);
        }     
} 

春季启动将使用8585端口启动服务器。


17

取决于您使用的应用程序配置文件,可以通过三种方法来完成此操作

a)如果您正在使用application.properties文件集

server.port = 8090

b)如果您使用的是application.yml文件,则将服务器端口属性设置为YAML格式,如下所示

server:
     port: 8090

c)您也可以在main方法中将该属性设置为System属性

System.setProperty("server.port","8090");

15

如果使用gradle作为构建工具,则可以在application.yml文件中将服务器端口设置为:

server:
  port: 8291

如果使用的是maven,则可以在application.properties文件中将端口设置为:

server.port: 8291

for application.propertiesserver.port = 8291
iQuestProgrammer,


13
  1. 大家都说过,您可以在application.properties中指定
    server.port = 9000(可以是任何其他值)

  2. 如果您在项目中使用弹簧执行器,默认情况下它指向
    8080,并且如果要更改它,则在application.properties中提及
    management.port = 9001(可以是任何其他值)



12

application.properties文件中,添加以下行:

server.port = 65535

在哪里放置国际剑联:

24.3应用程序属性文件

SpringApplication在以下位置从application.properties文件加载属性,并将它们添加到Spring Environment:

A /config subdirectory of the current directory
The current directory
A classpath /config package
The classpath root

该列表按优先级排序(在列表较高位置定义的属性会覆盖在较低位置定义的属性)。

就我而言,我将其放在jar文件所在的目录中。

从:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files


12

默认情况下,spring boot应用程序从嵌入式tomcat服务器启动,默认端口为8080。spring为您提供了以下不同的自定义选项,您可以选择其中一种。

注意 –您可以使用server.port = 0进行弹簧引导,它将为我们找到任何未分配的http随机端口。

1)application.properties

server.port=2020

2)application.yml

server:  
     port : 2020

3)以编程方式更改服务器端口

3.1)通过实现WebServerFactoryCustomizer接口-Spring 2.x

@Component
public class MyTomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        // customize the factory here
        factory.setPort(2020);
    }
}

3.2)通过实现EmbeddedServletContainerCustomizer接口-Spring 1.x

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        // customize here
        container.setPort(2020);
    }
}

4)通过使用命令行选项

 java -jar spring-boot-app.jar -Dserver.port=2020

10

确实,最简单的方法是设置server.port属性。

如果您使用STS作为IDE,从3.6.7版本开始,您实际上具有Spring Properties Editor,用于打开属性文件。

该编辑器为所有Spring Boot属性提供自动完成功能。如果编写端口并按CTRL + SPACE,则server.port将是第一个选项。


1
或者另外,如果您使用的是Intellij IDEA,则自动完成功能也可以使用。;)
幸运

9

像其他答案中提到的那样,使用属性server.port = 8080绝对是一种方法。只是想提到您还可以公开一个环境属性:

SERVER_PORT=8080

由于弹簧靴能够代替“。” 对于“ _”,对于最新版本的环境变量,请减小到大写。这在容器中非常有用,您只需要做的就是定义该环境变量,而无需application.properties通过命令行(即-Dserver.port=$PORT)添加/编辑或传递系统属性。


SERVER_PORT=8081 mvn spring-boot:run
nobar


8

在application.properties文件中提供端口号将解决此问题

 server.port = 8080

“端口取决于您的选择,您希望在哪里托管应用程序”


7

您可以通过以下方法添加端口。

  1. 运行->配置部分

  2. application.xml添加server.port=XXXX


1
您的意思application.yml是,您正在使用什么IDE?请具体说明。
幸运

7

您可以在/ src / main / resources /下的application.properties中进行设置

server.port = 8090

7

只要有一个application.propertiessrc/main/resources该项目,并给予有

server.port=****

其中,****是指端口号。


7

1.1通过属性文件进行更新。

/src/main/resources/application.properties

server.port = 8888

通过yaml文件进行更新。

   server:

     port: 8888

EmbeddedServletContainerCustomizer

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {

        container.setPort(8888);

    }

}

6

您也可以使用 SERVER_PORT环境变量来配置Spring Boot端口。只需设置环境变量并重新启动应用程序即可:

set SERVER_PORT=9999 // on windows machine
export SERVER_PORT=9999 // on linux

请注意,如果未在系统范围内设置这些环境变量,则应在同一会话上运行启动应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.