Loredana Crusoveanu 2018-05-01
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 就会自动加载它们。
2.1. 针对不同环境设置不同端口
如果应用需要部署在多个环境中,我们可能希望它在每个环境中运行在不同的端口上。
通过结合属性文件与 Spring Profiles(配置文件),我们可以轻松实现这一点。具体做法是为每个环境创建对应的属性文件。
例如,创建一个 application-dev.properties 文件,内容如下:
server.port=8081
再创建一个 application-qa.properties 文件,使用不同的端口:
server.port=8082
对于大多数场景来说,使用属性文件进行配置已经足够。但 Spring Boot 还提供了其他方式,下面我们继续探讨。
3. 编程式配置
我们也可以通过编程方式配置端口,包括在启动应用时设置特定属性,或自定义内嵌服务器的配置。
方法一:在主 @SpringBootApplication 类中设置属性
@SpringBootApplication
public class CustomApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(CustomApplication.class);
app.setDefaultProperties(Collections
.singletonMap("server.port", "8083"));
app.run(args);
}
}
方法二:通过实现 WebServerFactoryCustomizer 接口自定义服务器配置
@Component
public class ServerPortCustomizer
implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
@Override
public void customize(ConfigurableWebServerFactory factory) {
factory.setPort(8086);
}
}
注意:上述代码适用于 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 对上述各种配置方式设有明确的优先级顺序。
从高到低依次为:
- 内嵌服务器的编程式配置(如
WebServerFactoryCustomizer) - 命令行参数(如
--server.port=8083) - 属性文件(如
application.properties或 profile-specific 文件) - 主
@SpringBootApplication类中的setDefaultProperties设置
优先级高的配置会覆盖优先级低的配置。
6. 结论
本文介绍了在 Spring Boot 应用中配置服务器端口的多种方法,包括属性文件、编程式配置和命令行参数等。开发者可根据实际需求选择最合适的方式。