ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

b
blacktide

作为 said in docs 或者使用 jvm -Dserver.port=8090 的命令行选项将 server.port 设置为系统属性,或者在 /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 如此迷人的原因。
a
anataliocs

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

修改 application.properties

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

server.port = 8090

https://i.stack.imgur.com/b5lQi.png

修改 VM 选项

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

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

-Dserver.port=8090

https://i.stack.imgur.com/CIZ4p.png

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


在 STS 4 中,它位于运行 -> 运行配置 -> 主目录,然后向下滚动到带有参数名称和值的表
t
tan9

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

通过命令行参数传递属性作为应用程序参数 java -jar --server.port=7788 From property in SPRING_APPLICATION_JSON (Spring Boot 1.3.0+) 在 U*IX shell 中定义环境变量:SPRING_APPLICATION_JSON ='{"server.port":7788}' java -jar 通过使用Java系统属性:java -Dspring.application.json='{"server.port":7788}' - jar 通过命令行参数传递: java -jar --spring.application.json='{"server.port":7788}' 定义JVM系统property java -Dserver.port=7788 -jar 定义操作系统环境变量 U*IX Shell SERVER_PORT=7788 java -jar Windows SET SERVER_PORT=7788 java -jar 将属性放入 ./config/application.properties 配置文件 server.port=7788 并运行: java -jar 将属性放入 ./config/application。 yaml 服务器:端口:7788 并运行:java -jar 将属性放在 ./application.properties server.po rt=7788 并运行:java -jar 将属性放在 ./application.yaml 服务器中:端口:7788 并运行:java -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 完成。


P
Positive Navid

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

对于 Spring Boot 2.xx:

@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 吗?如果有请更新。
B
Brent Bradburn

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

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
a
ayurchuk

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

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

server:
     port: 9000

当然,随机端口为 0。


这似乎不起作用。我在 application.yml 中使用了 server.port 并且它有效
此外,请确保在 : 和值之间保留一个空格。
O
OlivierTerrien

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

d
developerick

application.properties 中包含以下属性

server.port=8080

这行不通。什么application.properties?哪些属性可以覆盖这个?我怎么能确定春天正在捡起它?
L
Luis Mauricio

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

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

这可能有助于诸如环境相关端口之类的事情。祝你今天过得愉快


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

扩展其他答案:

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

41.3 测试 Spring Boot 应用程序

41.3.3 使用随机端口

在集成测试中,使用注释 @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() {
    }

}

G
Gaurav Jeswani

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

server:
  port: 8291

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

server.port: 8291

对于 application.properties 它的 server.port = 8291
Maven 和 Gradle 与您使用属性还是 YAML 文件有什么关系?构建过程 (Maven) 与应用程序框架 (Spring Boot) 完全不同。
W
Will

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


F
FelixSFD

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

server.port=8082

L
LukeSolar

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

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

server.port = 8090

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

server:
     port: 8090

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

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

D
Deepesh kumar Gupta

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

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

我使用了其中的几个,如下所示。

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

d
developerick

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

server.port= 8080

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

正如大家所说,你可以在application.properties server.port = 9000 中指定(可以是任何其他值)如果你的项目中使用spring actuator,默认指向8080,如果你想改变它,那么在application.properties 提到 management.port = 9001(可以是任何其他值)


Z
ZhaoGang

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

server.port = 65535

在哪里放置该文件:

24.3 应用程序属性文件 SpringApplication 从以下位置的 application.properties 文件中加载属性并将其添加到 Spring 环境中: 当前目录的 /config 子目录 当前目录 类路径 /config 包 类路径根 列表按优先级排序 (在列表中较高位置定义的属性会覆盖在较低位置定义的属性)。

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

从:

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


a
anandchaugule

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

注意 – 您可以使用 server.port=0 spring boot 将为我们找到任何未分配的 http 随机端口。

1) application.properties

server.port=2020

2)应用程序.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

A
Adrian Cosma

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

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

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


或者,如果您使用 Intellij IDEA,自动完成功能也可以。 ;)
N
NafazBenzema

默认情况下,spring-web 模块提供了一个在 8080 端口下运行的嵌入式 tomcat 服务器。如果您需要更改应用程序的端口号,请转到 application.properties 文件并使用 server.port 属性配置端口号.

  server.port= 9876

那么您的应用程序在端口 9876 下运行。


S
Sagar Mal Shankhala

希望这个有帮助

application.properties=> 

server.port=8090

application.yml=> 

server
  port:8090

application.yml => 服务器:端口:8090
d
developerick

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

SERVER_PORT=8080

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


SERVER_PORT=8081 mvn spring-boot:run
B
Bogdan Bogdanov

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

运行 -> 配置部分在 application.xml 添加 server.port=XXXX


您是指 application.yml 吗?您使用的是什么 IDE?请具体。
g
gawi

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

server.port=****

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


J
Jakub Matczak

1.1 通过属性文件更新。

/src/main/resources/application.properties

服务器端口=8888

通过 yaml 文件更新。

   server:

     port: 8888

EmbeddedServletContainerCustomizer

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {

        container.setPort(8888);

    }

}

A
Ashwini

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

 server.port = 8080

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


A
Abhijeet

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

server.port = 8090

I
Ishan Garg

默认情况下,Spring-web 模块提供了一个在端口号 8080 上运行的嵌入式 tomcat 服务器。

您可以按如下方式更改它 -

A)如果您使用的是 gradle,那么使用可以在您的 application.yml 中设置属性:

 server:  
      port: 8042

B)如果您使用的是 maven,那么您可以在 application.properties 中设置属性:

server.port: 8042

C)当您在自己的配置文件中有端口并希望在运行时设置它时。

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

@Component
public class MyTomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

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

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

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

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

我同意 A) 和 B) 应该是你的选择,如果你没有做任何奇怪的事情