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

Posted

技术标签:

【中文标题】如何为 Spring Boot 应用程序配置端口【英文标题】:How to configure port for a Spring Boot application 【发布时间】:2014-01-31 17:16:15 【问题描述】:

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

【问题讨论】:

如果有人感兴趣,这里展示了如何拥有多个端口 - ***.com/questions/36357135/… 如果您使用“yml”文件进行配置,那么您可以使用此服务器:端口:8081 还将您的主类注释为“@SpringBootApplication”并删除@EnableAutoConfiguration 您的项目 [application.properties] 用于添加 server.port=8080 在应用程序属性中设置server.port=8080。此配置在org.springframework.boot.autoconfigure.web 下的ServerProperties.class 类中。 【参考方案1】:

作为said in docs 或者使用命令行选项将server.port 设置为系统属性到jvm -Dserver.port=8090 或者在/src/main/resources/ 中添加application.properties

server.port=8090

随机端口使用

server.port=0

/src/main/resources/ 中添加application.yml

server:
  port : 8090

【讨论】:

使用随机端口时,可以通过@Value("$local.server.port")获取端口信息 实际上命令行选项是--server.port=8090 而不是-Dserver.port=8090。 docs.spring.io/spring-boot/docs/current/reference/html/… 作为对这个答案的补充:根据spring docs,您可以将application.properties 放在其他路径上。就我而言,这很有帮助。 -Dserver.port=XXXX 对我不起作用。我使用了OS环境变量模式:$ SERVER_PORT=8090 java -jar <path/to/my/jar> (1) java -Dserver.port=XXXX -jar <path/to/my/jar> 和 (2) java -jar <path/to/my/jar> --server.port=YYYY 都有效。第一个命令定义server.port 系统属性,第二个命令通过命令行参数传递属性(main 方法中的String... args)。此外,如果你使用java -Dserver.port=XXXX -jar <path/to/my/jar> --server.port=YYYY 运行,YYYY 优先于XXXX,这就是 Spring Boot Externalized Configuration 如此迷人的原因。【参考方案2】:

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

【讨论】:

直接链接:docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/… 这是程序化覆盖部分的当前链接:docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…【参考方案3】:

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

server:
     port: 9000

当然还有 0 表示随机端口。

【讨论】:

这似乎不起作用。我在 application.yml 中使用了 server.port 并且它工作了【参考方案4】:

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

修改 application.properties

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

server.port = 8090

修改虚拟机选项

第二种方式,如果你想避免修改任何文件并签入你只需要在本地的东西,你可以使用 vm arg:

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

-Dserver.port=8090

此外,如果您需要更多信息,可以在此处查看以下博客文章:Changing the port on a Spring Boot Application

【讨论】:

在 STS 4 中它在运行 -> 运行配置 -> 主,然后向下滚动到带有参数名称和值的表【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

对于 Spring Boot 2.x.x:

@Configuration
public class CustomContainer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> 
  public void customize(ConfigurableServletWebServerFactory factory)
    factory.setPort(8042);
  

对于旧版本:

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

【讨论】:

当您在自己的配置文件中有端口并想在运行时设置它时,这是有效且非常有用的。 当我需要将应用程序部署到 AWS Elastic Beanstalk 服务以从环境变量中获取端口时,这很有帮助。 当你想要一个独立的单元或集成测试时,这非常有用,+1。 当端口的环境变量已经以不同的名称定义时非常有用。 不是@Configuration 而不是@Controller?如果有,请更新。【参考方案7】:

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

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

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

【讨论】:

或者,如果您使用 Intellij IDEA,自动完成功能也可以。 ;)【参考方案8】:

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

    运行 -> 配置部分

    application.xml 中添加server.port=XXXX

【讨论】:

您的意思是application.yml,您使用的是什么IDE?请具体。【参考方案9】:

你可以在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。 我有第二个“应用程序”类作为实用程序,我只想在其中设置一个不同的端口。因此,所有基于配置文件的方法对我都没有帮助。接近放弃我发现了你的程序化方法。谢谢!【参考方案10】:

当您需要以编程方式执行此操作时,您可以在启动时进行设置:

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

这可能有助于环境相关端口等问题。 祝你有美好的一天

【讨论】:

System.setProperty("server.port", 80); 是实现相同目的的另一种方式。 @hd1,我将我们的答案添加到主要答案中,请检查并根据需要进行修改【参考方案11】:

如果你想在本地运行它,使用这个 -

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

Spring Boot 2.0 开始,以下是有效的命令(线索为 here):

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

【讨论】:

从 Spring Boot 2 开始,你应该使用spring-boot.run.jvmArguments【参考方案12】:

在我的情况下添加声明

server.port=$port:8081

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

【讨论】:

【参考方案13】:

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

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

请注意,如果您没有在系统范围内设置这些环境变量,您应该在同一个会话中运行启动应用程序。

【讨论】:

【参考方案14】:

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

server.port = 8090

【讨论】:

【参考方案15】:

将此添加到您的 application.properties 文件中

server.port= 8080

【讨论】:

欢迎来到 SO :-) 请看How to Answer 为什么要在一年后添加相同的asnwer?!?并且server.port 8080 是 Java 属性文件的错误语法...【参考方案16】:

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

SERVER_PORT=8080

由于 spring boot 能够替换“.”在最近的版本中,环境变量的“_”和小写为大写。 这在容器中特别有用,您只需定义环境变量而不添加/编辑application.properties 或通过命令行传递系统属性(即-Dserver.port=$PORT

【讨论】:

SERVER_PORT=8081 mvn spring-boot:run【参考方案17】:

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

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

【讨论】:

【参考方案18】:

application.properties 中包含以下属性

server.port=8080

【讨论】:

这不起作用。什么application.properties?哪些属性可以覆盖这个?我怎么能确定 Spring 正在接受它?【参考方案19】:

如果您要在命令环境中将应用程序作为 jar 文件运行,只需键入“SERVER_PORT=***”作为前缀。要执行的完整命令如下所示:

SERVER_PORT=8080 java -jar ***.jar

如果你想在 Linux 后台运行应用程序,带有 'nohup' 的命令将如下所示:

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

【讨论】:

【参考方案20】:

由于 Spring Boot 提供 various configuration externalization mechanism(通过各种 PropertySource 实现和/或按顺序连接到 Environment 对象的处理器),您可以通过以下方式设置 jar 存档的任何属性 outside方法:

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

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

    来自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'
    

    定义JVM系统属性

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

    定义操作系统环境变量

    U*IX 外壳

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

    窗户

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

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

    server.port=7788
    

    然后运行:

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

    将属性放置在./config/application.yaml

    server:
        port: 7788
    

    然后运行:

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

    将属性放在./application.properties

    server.port=7788
    

    然后运行:

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

    将属性放置在./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 的转换由 Relaxed Binding 完成。

【讨论】:

【参考方案21】:

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

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

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

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

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

server.port=$port:4588

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

server:
   port: $port:4588

如果-Dport(或-Dserver.port)传递的端口是在命令行中设置的,那么这个端口将被考虑在内。如果没有,则默认端口为 4588。

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

server.port=8888

【讨论】:

【参考方案22】:

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

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

【讨论】:

【参考方案23】:

您可以在 spring boot 项目的资源文件夹中的 application.properties 文件中配置您的端口。

server.port="port which you need"

【讨论】:

【参考方案24】:

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

server.port=8082

【讨论】:

【参考方案25】:

三种方法

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

server.port = 8090

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

server:
     port: 8090

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

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

【讨论】:

【参考方案26】:

扩展其他答案:

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

41.3 Testing Spring Boot applications 41.3.3 Working with random ports

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


随机端口:

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

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

示例:

随机端口测试配置:

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


定义端口:

@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

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

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

例子:

定义端口测试配置:

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

    @Test
    public void contextLoads() 
    


【讨论】:

【参考方案27】:

只需在项目的src/main/resources 中有一个application.properties 并提供给那里

server.port=****

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

【讨论】:

【参考方案28】:

这对我有用:

添加了自定义容器类:

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer 

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


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

然后我在我的主要方法的“@SpringBootApplication”类上设置“scanBasePackages”属性:(scanBasePackages = "custom container package")

@SpringBootApplication(scanBasePackages = "com.javabrains.util")
public class CourseApiApp 

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

它开始拾取自定义容器中设置的端口。

【讨论】:

【参考方案29】:

由于嵌入式 Tomcat,大部分 springboot 运行在 port:8080 上。在某些情况下,它可能会引发错误port 8080 already in use。为了避免此类问题,我们可以配置服务器端口。

使用 application.properties

添加server.port=9898

关于运行时配置

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

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

【讨论】:

【参考方案30】:

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);

    


【讨论】:

以上是关于如何为 Spring Boot 应用程序配置端口的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Spring Boot 应用程序的 gradle 构建设置活动配置文件?

如何为 Spring Boot 应用程序配置嵌入式 Tomcat 虚拟主机?

如何为非Spring Boot的Java应用程序指定外部配置文件

如何为批量插入配置spring boot和data jpa

如何为JSP配置spring boot mvc app?

如何为 Spring Boot RESTful Web 服务配置多级身份验证?