简介
Spring Boot应用程序在出厂时带有一个嵌入式服务器,其默认端口是8080 。不管是其他服务已经抑制了这个端口,还是你想在一个新的端口上创建一个新的微服务--在本指南中,我们将看看如何配置Spring Boot应用程序的端口。
application.properties和application.yml
Spring Boot项目中通常有两种类型的属性文件--application.properties 和application.yml 。
application.properties 文件遵循简单的key-value 格式,其中每一行代表一个新的键。application.yml 文件则遵循YAML格式。
这两个文件都是非常人可读和直接的,通常,当你开始使用一个骨架项目时,server.port 是你唯一的设置。
对于application.properties 。
server.port = 8090
对于application.yml 。
server:
port: 8090
**注意:**你可以把端口设置为一个随机的可用端口,方法是把它设置为0 。然后可以通过@Value("${local.server.port}") 获得。
以编程方式设置Spring Boot端口
你还可以以编程方式设置端口,因为定制的大多数方面最终都可以通过Spring Boot的类和注解来表达。
WebServerFactoryCustomizer 接口允许我们对服务器工厂进行定制。服务器工厂会在配置服务器本身之前 "咨询 "任何这种类型的Bean--所以你也可以通过这种方式设置端口、地址、错误页面等。
customize() 方法是接口中唯一暴露的方法,无论你在该方法中没有设置什么,都会被保留为默认值。如果你只是想改变端口,你只需调用通用工厂实例的setPort() 方法。默认的工厂是TomcatServletWebServerFactory 。
@Component
public class ChangePort implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.setPort(8090);
}
}
对于通用的Servlet工厂,你可以使用。
@Component
public class ChangePort implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
@Override
public void customize(ConfigurableWebServerFactory factory) {
factory.setPort(8090);
}
}
Spring Boot会自动拾取实现WebServerFactoryCustomizer 的Bean,只要定义它,你就可以改变服务器的启动过程。
为什么你要以编程方式而不是通过配置文件来设置?
以编程方式改变配置文件比以编程方式设置端口要麻烦得多。当把应用程序部署到远程主机时,你可能需要通过环境变量或另一个配置文件来读取应用程序的建议端口,并根据输入数据来设置应用程序的端口。
在这种情况下,与其阅读和改变一个文件,不如简单地阅读环境变量,并根据它来设置端口,这样会更简单、更干净。
用CLI设置端口
最后,你可以在启动应用程序时,通过CLI轻松地改变它的端口。你可能不使用CLI来启动应用程序,在这种情况下,前面两个选项可能更适合你。
如果你使用的是Maven,在启动应用程序时,要包含一个JVM参数。
$ mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=8090'
或者,如果你使用Spring自己的CLI,你可以通过添加额外的空白-- ,将命令行参数与Spring的命令参数分开传入。
$ spring run application_name.groovy -- --server.port=8090
结论
在这个简短的教程中,我们快速浏览了改变Spring Boot应用程序的默认端口的三种方法。你可以通过修改相应的属性文件、以编程方式实现WebServerFactoryCustomizer 或通过CLI来改变默认端口。