1.简介
Spring Boot为许多配置属性提供合理的默认值。尽管如此,我们有时需要使用特定于案例的值来定制这些值。
常见用例是更改嵌入式服务器的默认端口。
在本快速教程中,我们将介绍实现此目的的几种方法。
2.使用属性文件
自定义Spring Boot的最快速最简单的方法是覆盖默认属性的值。
对于服务器端口,我们要更改的属性是server.port。
默认情况下,嵌入式服务器从端口8080开始。让我们看看我们如何在application.properties文件中提供不同的值:
server.port=8081
现在服务器将在端口8081上启动。
同样,如果我们使用的是application.yml文件,我们也可以这样做:
server:
port : 8081
如果放在Maven应用程序的src/main/resources目录中,则Spring Boot会自动加载这两个文件(application.properties或者application.yml)。
2.1.环境特定端口
如果我们有一个部署在不同环境中的应用程序,我们可能希望它在每个系统上的不同端口上运行。
我们可以通过将属性文件方法与Spring配置文件相结合来轻松实现此目的 具体来说,我们可以为每个环境创建属性文件。
例如,我们将有一个带有内容的application-dev.properties文件:
server.port=8081
然后,我们将添加另一个带有不同端口的application-qa.properties文件:
server.port=8082
对于大多数情况,修改属性文件配置应该足够了。
但是,这个目标还有其他选择,所以我们也要探索它们。
3.程序化配置
我们可以通过在启动应用程序时设置特定属性或通过自定义嵌入式服务器配置来以编程方式配置端口。
首先,让我们看看如何在主@SpringBootApplication类中设置属性:
1 @SpringBootApplication 2 public class CustomApplication { 3 public static void main(String[] args) { 4 SpringApplication app = new SpringApplication(CustomApplication.class); 5 app.setDefaultProperties(Collections 6 .singletonMap("server.port", "8083")); 7 app.run(args); 8 } 9 }
接下来,要自定义服务器配置,我们必须实现WebServerFactoryCustomizer接口:
1 @Component 2 public class ServerPortCustomizer 3 implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> { 4 5 @Override 6 public void customize(ConfigurableWebServerFactory factory) { 7 factory.setPort(8086); 8 } 9 }
请注意,这适用于Spring Boot 2.x版本。
对于Spring Boot 1.x,我们可以类似地实现EmbeddedServletContainerCustomizer接口。
4.使用命令行参数
当我们将应用程序打包并运行为jar时,我们可以使用java命令设置server.port参数:
java -jar spring-5.jar --server.port=8083
或者使用等效语法:
java -jar -Dserver.port=8083 spring-5.jar
5.调用顺序
最后,我们来看看Spring Boot调用这些方法的顺序。
基本上,配置优先级是:
- 嵌入式服务器配置
- 命令行参数
- 属性文件
- 主@SpringBootApplication配置
六,结论
在本快速教程中,我们了解了如何在Spring Boot应用程序中配置服务器端口。