关于java:如何为Spring Boot应用程序配置端口

How to configure port for a Spring Boot application

如何配置Spring引导应用程序监听的TCP/IP端口,使其不使用默认端口8080。


如文档中所述,要么使用jvm -Dserver.port=8090的命令行选项将server.port设置为系统属性,要么在/src/main/resources/中添加application.properties

1
server.port = 8090

用于随机端口

1
server.port=0


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

修改application.properties

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

1
server.port = 8090

application.properties file

修改虚拟机选项

第二种方法是,如果希望避免修改任何文件并签入仅在本地需要的文件,则可以使用vm参数:

转到运行->编辑配置->虚拟机选项

1
-Dserver.port=8090

氧化镁

此外,如果您需要更多信息,可以在此处查看以下日志:更改Spring引导应用程序上的端口


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

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

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

    • 在u*ix shell中定义环境变量:

      1
      SPRING_APPLICATION_JSON='{"server.port":7788}' java -jar <path/to/my/jar>

    • 通过使用Java系统属性:

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

      1
      java -jar <path/to/my/jar> --spring.application.json='{"server.port":7788}'

  • 定义JVM系统属性

    1
    java -Dserver.port=7788 -jar <path/to/my/jar>

  • 定义OS环境变量

    • U*IX外壳

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

      1
      2
      SET SERVER_PORT=7788
      java -jar <path/to/my/jar>

  • 将属性放入./config/application.properties配置文件

    1
    server.port=7788

    然后运行:

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

  • 把财产放在./config/application.yaml

    1
    2
    server:
        port: 7788

    然后运行:

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

  • 置业于./application.properties

    1
    server.port=7788

    然后运行:

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

  • 置业于./application.yaml

    1
    2
    server:
        port: 7788

    然后运行:

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

  • 您可以将以上所有方法组合在一起,列表中的前一个配置优先于后一个配置。

    例如:

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

    服务器将启动并监听端口7788。

    这对于在优先级较低的属性源中提供默认属性(通常打包在存档中或在源中编码)非常有用,然后在运行时环境中重写它。它是弹簧靴的设计理念:

    Be opinionated out of the box, but get out of the way quickly as requirements start to diverge from the defaults.

    SERVER_NAMEserver.name的转换是通过宽松的绑定完成的。


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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Configuration
    public class ServletConfig {
        @Bean
        public EmbeddedServletContainerCustomizer containerCustomizer() {
            return (container -> {
                container.setPort(8012);
            });
        }
    }


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

    1
    2
    3
    4
    5
    6
    7
    HashMap<String, Object> props = new HashMap<>();
    props.put("server.port", 9999);

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

    或在application.yml中:

    1
    2
    server:
        port: 9999

    或在application.properties中:

    1
    server.port=9999

    或作为命令行参数:

    1
    -Dserver.port=9999


    如果要在本地运行它,请使用此-

    埃多克斯1〔8〕

    从SpringBoot2.0开始,以下是有效的命令(这里有线索):

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


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

    1
    2
    server:
         port: 9000

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


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

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

    -Dserver.port=8888--server.port=8888

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

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

    1
    server.port=${port:4588}

    或(在application.yml中,使用yaml语法)

    1
    2
    server:
       port: ${port:4588}

    如果在命令行中设置了-dport(或-dserver.port)传递的端口,那么将考虑该端口。如果没有,则默认端口为4588。

    如果您想强制属性文件中的端口使用环境变量,只需写:

    1
    server.port=8888

    application.properties中包含以下属性

    1
    server.port=8080


    当您需要一种编程方式时,可以在启动时设置:

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

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


    可以通过在配置中重写EDCOX1×4 bean来指定端口(基于Java或XML)。在这里,您可以为使用的嵌入式servlet容器指定端口。请参阅弹簧引导-核心"嵌入式servlet容器支持"一段和示例。希望这有帮助。


    扩展其他答案:

    在测试文档中有一节解释了如何在集成测试中配置端口:

    • 41.3测试弹簧套应用
    • 41.3.3使用随机端口

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

    随机端口:

    1
    @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

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

    • 例子:

    随机端口测试配置:

    1
    2
    3
    4
    5
    6
    7
    @RunWith(SpringRunner.class
    @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
    public class ExampleTest {
       ...
       @LocalServerPort //to inject port value
       int port;
    }

    号定义的端口:

    1
    @SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

    如果已定义,则从server.port中获取值。

    • 如果使用@TestPropertySource(properties ="server.port=9192")定义,它将覆盖其他定义的值。
    • 如果没有,则取src/test/resources/application.properties的值(如果存在)。
    • 最后,如果没有定义,则从默认的8080开始。

    例子:

    定义的端口测试配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
    @TestPropertySource(properties ="server.port=9192")
    public class DemoApplicationTests {

        @Test
        public void contextLoads() {
        }

    }

    在资源中存在的application.properties文件中:

    1
    server.port=8082


    当Spring引导应用程序启动时,嵌入式服务器(如Tomcat)将以默认端口启动。嵌入式Tomcat默认从8080端口开始。有很多方法可以更改默认服务器端口。

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

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

    a. Using application.properties in classpath such as
    src\main
    esources\application.properties

    1
    server.port = 8585

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

    1
    server.port = 0

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

    b. Using application.yml in classpath such as
    src\main
    esources\application.yml.

    1
    2
    server:
      port: 8585

    服务器将以8585端口启动。

    对于随机端口,分配0。

    1
    2
    server:
      port: 0

    使用.Server端口或-dServ.PoT的Java命令

    假设我们有一个名为MyApp.jar的可执行jar,然后在使用Java命令启动Spring启动应用程序时,我们可以使用如下的参数。

    Using --server.port

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

    Using -Dserver.port

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

    服务器将以8585端口启动。

    使用JAVA命令使用-PART或Dport

    简而言之,要使--server.port和-dserver.port,我们可以删除server关键字并使其成为任何短关键字,如--port和-dport。我们可以使用任何短关键字。这里我们使用端口作为短关键字。为了实现它,我们需要在属性文件中配置占位符,如下所示。

    Using application.properties

    1
    server.port=${port:8282}

    Using application.yml

    1
    2
    server:
       port: ${port:8282}

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

    Using --port

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

    Using -Dport

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

    服务器将以8585端口启动。

    以编程方式将服务器端口与SpringApplication一起使用

    SpringApplication有一个方法setDefaultProperties(),用于更改Spring引导默认属性。假设我们想要更改默认端口,那么我们需要创建一个映射并放置一个带有服务器端口密钥的端口。找到例子。

    我的应用程序.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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);
            }    
    }

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


    根据您使用的应用程序配置文件,有三种方法可以做到这一点

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

    server.port = 8090

    b)如果您使用application.yml文件,请按下面给出的yaml格式设置服务器端口属性

    1
    2
    server:
         port: 8090

    c)也可以在主方法中将该属性设置为系统属性。

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

    通过更改application.properties,您可以在服务器配置中更改许多其他内容。如会话超时、地址和端口等,请参阅下文。

    参考:http://docs.spring.io/spring-boot/docs/1.4.x/reference/html/common-application-properties.html

    我很少使用它们,如下所示。

    1
    2
    3
    server.session.timeout=1
    server.port = 3029
    server.address= deepesh

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

    埃多克斯1〔2〕

    在何处放置外商投资企业:

    24.3 Application Property Files

    SpringApplication loads properties from application.properties files
    in the following locations and adds them to the Spring Environment:

    1
    2
    3
    4
    A /config subdirectory of the current directory
    The current directory
    A classpath /config package
    The classpath root

    The list is ordered by precedence (properties defined in locations
    higher in the list override those defined in lower locations).

    在我的例子中,我把它放在jar文件所在的目录中。

    来自:

    https://docs.spring.io/spring boot/docs/current/reference/htmlsingle/boot features外部配置应用程序属性文件


  • 如大家所说,您可以在application.properties中指定server.port=9000(可以是任何其他值)

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


  • 在你的application.properties文件中加上这个

    1
    server.port= 8080


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

    如果您使用STS作为IDE,那么在3.6.7版中,您实际上有了用于打开属性文件的Spring属性编辑器。

    此编辑器为所有Spring引导属性提供自动完成功能。如果写入端口并按ctrl+space,则server.port将是第一个选项。


    希望这个能帮上忙

    1
    2
    3
    4
    5
    6
    7
    8
    application.properties=>

    server.port=8090

    application.yml=>

    server
      port:8090


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

    1
     server.port = 8080

    端口取决于您的选择,要在哪里承载应用程序


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

    1
    SERVER_PORT=8080

    因为在最新版本中,Spring boot能够替换"."表示"u",并从小写到大写表示环境变量。这在容器中特别有用,您只需定义环境变量而不添加/编辑application.properties或通过命令行传递系统属性(即-Dserver.port=$PORT)。


    1.1通过属性文件更新。

    /src/main/resources/application.properties

    server.port=8888

    通过yaml文件更新。

    1
    2
    3
       server:

         port: 8888

    EmbeddedServletContainer自定义程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Component
    public class CustomContainer implements EmbeddedServletContainerCustomizer {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {

            container.setPort(8888);

        }

    }


    只要在项目的src/main/resources中有一个application.properties并给出

    1
    server.port=****

    其中****表示端口号。


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

    1
    server.port = 8090

    默认情况下,Spring引导应用程序从默认端口8080启动嵌入式Tomcat服务器。Spring为您提供了以下不同的定制,您可以选择其中之一。

    NOTE – you can use server.port=0 spring boot will find any unassigned http random port
    for us.

    1)应用程序属性

    1
    server.port=2020

    2)应用.yml

    1
    2
    server:  
         port : 2020

    3)通过编程更改服务器端口

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Component
    public class MyTomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Component
    public class CustomizationBean implements EmbeddedServletContainerCustomizer {

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

    4)使用命令行选项

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


    您可以在以下方法中添加端口。

  • 运行->配置部分

  • application.xml中加server.port=XXXX


  • 您还可以使用SERVER_PORT环境变量配置Spring引导端口。只需设置环境变量并重新启动应用程序:

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

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


    可以在Spring引导项目的resources文件夹中的application.properties文件中配置端口。

    1
    server.port="port which you need"


    有三种方法可以做到

    1在application.properties文件中设置server.port属性

    1
    server.port = 8090

    2设置application.yml文件中的服务器端口属性

    1
    2
    server:
         port: 8090

    3.在main方法中将属性设置为系统属性

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


    由于嵌入了Tomcat,大多数SpringBoot运行在port:8080上。在某些情况下,它可能会抛出错误port 8080 already in use。为了避免这种问题,我们可以配置服务器端口。

    使用application.properties

    增加server.port=9898

    运行时配置

    使用以下参数运行应用程序。

    江户十一〔四〕号


    如果要在命令环境中以JAR文件的形式运行应用程序,只需键入"serveru port=***"作为前缀。要执行的完整命令如下所示:

    1
    SERVER_PORT=8080 java -jar ***.jar

    如果您想在Linux的后台运行应用程序,那么带有"nohup"的命令如下所示:

    1
    SERVER_PORT=8080 nohup java -jar ***.jar &


    如果你谷歌搜索GradleSpring端口,这个问题是第一个结果。

    如果使用Gradle,如果已经应用了Spring Boot Gradle插件,则可以这样做:

    1
    2
    3
    bootRun {
        args += ["--server.port=[PORT]"]
    }

    关于更复杂的答案,请看我的答案。


    如果您正在处理引导项目,并且您想要配置端口,那么您可以在application.properties文件中提供如下输入:注意:属性文件应该在src/main/resource下

    弹簧特性

    server.port=9999
    If you using the CMD then follow this command
    -Dserver.port=9999
    For default port its server.port=0
    Make sure no port is using this port number


    默认端口为:8080,但我们可以在application.properties中自定义端口号。如下图所示

    1
    2
    3
    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    server.port = 5050 -- #here we can give any port number.


    "server.port=8080"仅在通过主方法将应用程序作为JAR运行时有效,

    如果您通过Tomcat容器将此应用程序作为war文件运行,则此配置将不起作用。


    如果您的端口号是随机的,您可以在您的application.propertiesserver.port=${random.int(4)}中使用随机函数。


    这对我很有用:

    添加了自定义容器类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Component
    public class CustomContainer implements EmbeddedServletContainerCustomizer {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
           configurableEmbeddedServletContainer.setPort(8888);
        }

    }

    但这仍然没有使用端口8888。

    然后我在主方法:(scanBasePackages = {"custom container package"})的"@SpringBootApplication"类上设置了这样的"scanBasePackages"属性。

    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication(scanBasePackages = {"com.javabrains.util"})
    public class CourseApiApp {

        public static void main (String args []) {
            SpringApplication.run(CourseApiApp.class, args);
        }
    }

    它开始提取定制集装箱中设置的港口。


    在Spring引导中,您可以很容易地在application.properties文件中配置服务公开端口。

    1
    server.port=portnumber

    如果您没有具体设置端口,那么它将尝试使用端口80打开服务。如果已经使用,则不会在嵌入的容器上启动服务。


    与https://stackoverflow.com/a/36865796/1587329和https://stackoverflow.com/a/40799750/1587329类似,Gradle One衬板将

    1
    SERVER_PORT=9090 gradle bootRun


    在应用程序属性中,只需添加一行

    1
    server.port = 8090


    在我的例子中,添加语句

    1
    server.port=${port:8081}

    覆盖默认的Tomcat服务器端口。