如何配置Spring Boot应用程序监听的TCP/IP端口,以便不使用默认的8080端口。
如何配置Spring Boot应用程序监听的TCP/IP端口,以便不使用默认的8080端口。
@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
configurableEmbeddedServletContainer.setPort(8888);
}
}
(scanBasePackages = {"自定义容器包"})
@SpringBootApplication(scanBasePackages = {"com.javabrains.util"})
public class CourseApiApp {
public static void main (String args []) {
SpringApplication.run(CourseApiApp.class, args);
}
}
application.properties
文件中配置服务的端口。server.port=portnumber
80
打开服务。如果该端口已被占用,则服务将不会在嵌入式容器上启动。除了在application.properties中添加端口,您还可以通过将属性文件方法与Spring配置文件相结合,轻松实现不同环境的多个端口。具体来说,我们可以为每个环境创建一个属性文件。
例如,我们将拥有一个名为application-dev.properties的属性文件,其内容如下:
server.port=8081
然后你可以添加另一个application-qa.properties文件,使用不同的端口:
server.port=8082
server.port = 0
表示随机端口。
server.port
= 8080 表示使用自定义的 8080 端口。
application.properties
文件中使用随机函数:server.port=${random.int(4)}
。请注意,这个函数将会生成一个介于0到3之间的随机整数作为端口号。许多参数,包括服务器端口,可以通过多种方式进行更改。但是,如下所述,有一定的优先顺序:
@Component
public class CustomConfiguration implements WebServerFactoryCustomizer {
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
factory.setPort(9090);
}
}
在这里,我们将服务器端口设置为硬编码的9090。为了避免硬编码,我们可以在bean类中使用@Value注释分配环境值,然后在此处使用它。
第二个优先级分配给命令行参数,如下所示:
java -jar target/spring-boot-0.0.1-SNAPSHOT.jar --server.port=8092
在这里,我们告诉服务器开始侦听8092端口。请注意,如果同时使用上述两种方法,则会忽略命令行参数,因为自定义代码被赋予了第一优先级。
第三个优先级分配给操作系统环境变量。如果以上两种方法都没有采用,Spring将从环境属性中获取服务器端口。在Kubernetes上部署时,将使用在Deployment yaml的env部分下设置的属性。
第四个优先级分配给特定配置文件application.properties。
第五个优先级分配给在application.properties文件中分配的值(默认情况下,Spring Boot尝试查找src/main/resources/config,如果未找到,则尝试在src/main/resources下查找)。
最可管理和有用的方法可能是第一和第三种方法的组合。您可以使用环境属性并使用自定义代码。
示例代码:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class EnvironmentCustomizer {
@Value("${server.port}")
private int serverPort;
public void setServerPort(int serverPort) {
this.serverPort = serverPort;
}
public int getServerPort() {
return serverPort;
}
}
@Configuration
public class CustomConfiguration
{
@Autowired
EnvironmentCustomizer envCustomizer;
@Bean
WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> webServerPortCustomizer() {
return factory -> factory.setPort(envCustomizer.getServerPort());
}
}
--
将命令与spring
命令参数分开,以更改端口:
spring run hello.groovy -- --server.port=9000
spring-boot cli
server.port=8080
。此配置位于org.springframework.boot.autoconfigure.web
下的ServerProperties.class
类中。 - Atif