Spring Boot 项目启动指定 HTTP 端口的几种方式

32 篇文章 4 订阅
订阅专栏
16 篇文章 0 订阅
订阅专栏

当我们进行业务开发的时候,通常都是需要暴露 HTTP 端口给前端页面进行调用。当我们使用 Spring Boot 进行 Web 业务开发的时候只需要引入以下 starter 依赖:

spring web 依赖 starter

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <version>2.3.0.RELEASE</version>
 </dependency>

引入了 spring-boot-starter-web 这个 starter 依赖,它会引入 tomcat 嵌入式容器。当我们使用 main 方法启动项目的时候它会内部启动 Tomcat 容器。这样我们就可以访问暴露的 restful 服务了。比如:

@RestController
@SpringBootApplication
public class Bootstrap {

    public static void main(String[] args) {
        SpringApplication.run(Bootstrap.class, args);
    }

    @GetMapping("test")
    public String test() {
        return "hello, world";
    }

}

然后我们可以访问:http://localhost:8080/test 这个地址就可以返回 hello, world字符串。
在这里插入图片描述
这个是因为 Tomcat 默认使用的是 8080 这个端口.其实不管是默认的 Tomcat 容器还是 Jetty 或者 Undertow。Spring Boot 都对它们进行了抽象,可以通过 ServletWebServerFactory 来获取到 WebServer。根据 classpath 中看 jar 包是依赖了 Tomcat、Jetty 或者 Undertow 来创建不同的容器。比如如果不使用 Tomcat 而想使用 Undertow,需要在 spring-boot-starter-web 这个 starter 当中排除 spring-boot-starter-tomcat 然后依赖 spring-boot-starter-undertow。如下所示:

使用 Undertow 为 Web 容器

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.3.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
        <version>2.3.0.RELEASE</version>
    </dependency>
</dependencies>

从下面的启动日志当中我们就可以看出它是以 Undertow 这个 Web 容器来启动的。关于容器切换具体的原理可以参考我的另一篇博客 - Spring Boot 自动配置原理解析

在这里插入图片描述
从上面的章节当中,我们可以看到 Spring Boot 在启动容器的时候默认通过 8080 来暴露 http 服务的。如果我们需要指定暴露 http 服务的端口,我们应该怎么做呢?其实可以通过下面几种方式来指定我们暴露的 http 服务端口。

1、配置文件

我们可以在配置文件当中通过 server.port 来指定我们服务启动暴露的端口。

application.properties

server.port=8888

启动控制台,日志如下所示:

在这里插入图片描述
它的实现原理如下:

[server.port] -> 
ServerProperties -> 
ServletWebServerFactoryCustomizer ->
ConfigurableWebServerFactory -> 
TomcatServletWebServerFactory

2、自定义 TomcatConnectorCustomizer

Spring 项目当中,可以通过 ServletWebServerFactory 来获取到 WebServer.Tomcat 的实现类是 TomcatServletWebServerFactory。在这个对象里面,可以通过 tomcatConnectorCustomizers 属性它是一个 Set<TomcatConnectorCustomizer>TomcatConnectorCustomizer 可以指定容器启动暴露的端口。

自定义 TomcatConnectorCustomizer

@Bean
public TomcatConnectorCustomizer customServerPortTomcatConnectorCustomizer() {
    return connector -> connector.setPort(8888);
}

启动控制台,日志如下所示:

在这里插入图片描述

3、自定义 WebServerFactoryCustomizer

TomcatServletWebServerFactory 不仅仅实现了 ServletWebServerFactory ,同时他也实现了WebServerFactory。而且 Spring Boot 来提供了 WebServerFactoryCustomizer 这个接口来定制化WebServerFactoryTomcatServletWebServerFactory同时也是实现了WebServerFactory的子接口 ConfigurableWebServerFactory。这个接口是可以对 WebServer 进行配置化,包括 Web 容器的端口。

自定义 WebServerFactoryCustomizer

@Bean
public WebServerFactoryCustomizer customServerPortWebServerFactoryCustomizer() {
    return factory -> {
        if (factory instanceof ConfigurableWebServerFactory) {
            ConfigurableWebServerFactory webServerFactory = ConfigurableWebServerFactory.class.cast(factory);
            webServerFactory.setPort(8888);
        }
    };
}

启动控制台,日志如下所示:

在这里插入图片描述

4、自定义 BeanPostProcessor

其实自定义 WebServerFactoryCustomizer 它的起始类是通过 WebServerFactoryCustomizerBeanPostProcessor 来进行自定义 WebServerFactory。具体的代码逻辑如下:
在这里插入图片描述
我们也可以模仿它通过自定义 BeanPostProcess 来自定义 Web 容器暴露的端口。

自定义 BeanPostProcessor

@Bean
public BeanPostProcessor customServerPortBeanPostProcessor() {
    return new BeanPostProcessor() {
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            if(bean instanceof ConfigurableWebServerFactory) {
                ConfigurableWebServerFactory webServerFactory = ConfigurableWebServerFactory.class.cast(bean);
                webServerFactory.setPort(8888);
            }
            return bean;
        }
    };
}

启动控制台,日志如下所示:

在这里插入图片描述

5、指定传入请求参数

在 Idea 工具中添加项目请求参数: --server.port=8888,如下所示:

在这里插入图片描述
启动控制台,日志如下所示:

在这里插入图片描述
它的实现原理是通过:org.springframework.boot.SpringApplication#configurePropertySources 把请求参数添加到 Spring 对环境变量的抽象 Environment 当中,然后通过以下方式把 server.port 设置到 Tomcat 容器当中:

把 Environment 值设置 Tomcat 的 port

- ConfigurationPropertiesBindingPostProcessor#postProcessBeforeInitialization 
把 Environment 中的 [server.port] 绑定到 ServerProperties 这个 bean 当中
- ServletWebServerFactoryCustomizer#customize
把 ServerProperties 的 port 设置到 Tomcat 当中
- AbstractConfigurableWebServerFactory#setPort

6、指定传入系统参数

在 Idea 工具中添加系统变量: -Dserver.port=8888,如下所示:

在这里插入图片描述
然后在 org.springframework.boot.SpringApplication#prepareEnvironment 调用 getOrCreateEnvironment() 之后,查看 environment,通过如下公式获取 ConfigurableEnvironment 对象中的 server.port

environment.getPropertySources().get("systemProperties").getProperty("server.port")

如下所示:
在这里插入图片描述
然后通过以下方式把 server.port 设置到 Tomcat 容器当中:

把 Environment 值设置 Tomcat 的 port

- ConfigurationPropertiesBindingPostProcessor#postProcessBeforeInitialization 
把 Environment 中的 [server.port] 绑定到 ServerProperties 这个 bean 当中
- ServletWebServerFactoryCustomizer#customize
把 ServerProperties 的 port 设置到 Tomcat 当中
- AbstractConfigurableWebServerFactory#setPort

以上就是博主现在已知的修改Spring Boot 项目启动指定 HTTP 端口的几种方式。

如何设置springboot启动端口
08-29
总的来说,Spring Boot 提供了多种方式来灵活地配置应用的启动端口,以适应不同的部署环境和需求。通过代码、配置文件或命令行参数,开发者可以根据实际情况选择最合适的方法来避免端口冲突,确保应用的正常运行。...
配置Spring Boot应用程序端口几种方式
华戈息息
01-08 2637
如果不对端口进行配置,则spring boo会启用默认的8080端口。 如果想自定义端口,则有以下几种方式可以配置。 方式一:通过配置文件 使用配置文件是最常用的,这里以properties为例,yml的方式也一样,则可以在/src/main/resources/下的application.properties文件中加入配置项,如下面代码是配置8090端口: server.port=80...
SpringBoot项目启动指定端口的三种方式
目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。
04-08 1万+
方式一 配置文件中添加server.port=8080 server: port: 8080 方式二 在命令行中指定启动端口,比如传入参数一server. port=8000 java -jar xxx.jar -- server.port=8000 方式三 传入虚拟机系统属性-Dserver.port=9000 java -Dserver.port=9000 -jar xxx.jar 以上,请参考! ...
SpringBoot集成WebSocket并使用
最新发布
不懂技术的小白
08-22 453
WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。具体的就不多说了,不懂的可以自己搜搜看,直接上代码。ws的配置文件使用案例测试使用:启动时建立ws连接: ws://ip:端口/路径(你要连接的ws名字)连接成功,调用http发送ws数据。
springboot项目如何配置启动端口
程序员大腾的博客
03-06 4814
项目启动需要一个独立的端口,所以在此记录一下。根据配置文件的后缀书写格式略有不同。因为工程化的软件不一定是自己一个人在本地开发,所以还是使用配置文件较好,所以:比较推荐的是.yaml的文件配置不推荐的是IDEA软件配置环境。
IDEA 配置 SpringBoot 启动端口的两种方式
景月娇-Kathy
12-16 1万+
目录一、properties文件配置 SpringBoot 启动端口二、 IDEA 本身的配置来指定启动端口三、IDEA 本身的配置来指定启动端口>properties文件配置 SpringBoot 启动端口 一、properties文件配置 SpringBoot 启动端口 新建一个.properties文件,在此文件中配置启动端口号,如图 运行结果:启动端口8081 二、 IDEA...
使用idea创建第一个springboot项目 及 如何启动springboot项目 及 如何指点端口和上下文
wudinaniya的博客
04-12 1万+
一 使用idea创建第一个springboot项目 1. File --> New --> Project... --> Spring Initializr ,如下图所示 指定jdk,Choolse Initializr Service URL 保持默认即可。然后,next. 2. 在弹出的 Project Metadata 窗口中,Version: 默认是0.0.1...
http-->https后端Java接口spring boot项目配置文件及生成证书的方法.7z
12-24
3. **启动应用**:完成配置后,重新启动Spring Boot应用,它将监听在8443端口,提供HTTPS服务。如果浏览器警告证书不安全,那可能是因为该证书是非权威的自签名证书。对于测试环境,这通常是可接受的,但在生产环境...
spring boot案列
10-16
8. **Spring Data JPA**:Spring Data JPA 提供了一种简化JPA操作的方式,包括CRUD操作、查询方法的自动生成等,使得数据库操作更加简洁。 9. **Maven或Gradle构建**:Spring Boot 项目通常使用Maven或Gradle作为...
2024Spring Boot原理篇HM
04-09
Spring Boot 应用的启动过程大致分为以下几个阶段: - **初始化**:读取配置文件并解析。 - **创建应用上下文**:构建`ApplicationContext`。 - **加载Bean定义**:解析配置文件或注解中的Bean定义。 - **创建Bean...
Spring boot 使用mysql实例详解
10-20
Spring Data JPA 是 Spring Boot 项目中常用的子项目,它提供了与数据库交互的方法,大大简化了数据访问层的代码编写。通过定义接口继承特定的 Spring Data JPA 接口,如JpaRepository,开发者可以很容易地实现数据...
SpringBoot指定端口几种方式
CBeann的博客
06-21 1万+
想法的来源 (1)其实我Linux用的贼烂,一开始的时候我搭建一个服务的时候我不清楚端口是否开放,比如我把阿里云的防火墙关闭了,但是我没有配置安全组,我任然不能通过某某端口访问 (2)比如你学习nginx的时候,你需要做映射,如果你需要好几个服务,那我原来的操作是在IDEA写完SpringBoot打包然后放到Linux上,然后在修改端口,在打包在放在Linux上,贼麻烦 SpringBoot指定端口的3种方式(亲测有效) @Value("${server.port}") private
IDEA中如何配置SpringBoot项目多实例不同端口运行
最爱嫣夜来
02-17 5283
配置结束之后让测试在8010端口进行测试, 我们可以在8009端口继续进行新的业务模块功能开发,匹配不会互相影响。我们在进行新项目开发的时候, 可能做完一个新的模块功能并自测通过之后, 我们希望测试人员能帮我跑一些单元测试用例来进行测试验证, 但是我们又需要在此基础上技术开发新的功能, 这是我们就需要在我们的开发PC上同时运行多实例来保证开发及内部测试的需求,下面就说说怎么在IDEA上实现这个同项目多实例运行。修改运行组名称和运行组中的启动实例。修改复制实例的名称及运行端口
SpringBoot
互联网底层民工的博客
06-12 2833
Spring-Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。个人理解来说Spring-Boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring-Boot整合了其他相关联框架。1、独立运行Spring项目Spring Boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jarxx.jar来运行。2、内嵌servlet容器。
springboot如何去自定义端口
m0_63102097的博客
05-09 997
Spring Boot中,可以通过在配置文件中设置server.port属性来自定义应用程序的端口号。下面是一些简单的方法。
Springboot之修改启动端口的两种方式(小结)
Sapphire521的博客
02-02 685
Springboot启动的时候,端口的设定默认是8080,这肯定是不行的,我们需要自己定义端口Springboot提供了两种方式,第一种,我们可以通过application.yml配置文件配置,第二种,可以通过代码里面指定,在开发中,建议使用修改application.yml的方式来修改端口。,在yml直接就变成下面的配置了,相同的头就直接前面空三格子即可,这样就将一些同类型的配置放一块了,比起properties,简单不少。设置后,端口访问正常,但是总的来说,希望大家通过配置文件的方式指定端口
SpringBoot在IDEA中同一个项目用不同端口启动
qq_19891197的博客
06-14 356
SpringBoot在IDEA中同一个项目用不同端口启动
springboot指定端口的三种方式
热门推荐
maguanghui_2012的专栏
12-21 1万+
第一配置文件中添加server.port=9090 第二在命令行中指定启动端口,比如传入参数一server. port=9000     java -jar bootsample. jar -- server.port=9000 第三传入虚拟机系统属性java - Dserver.port=9000 -jar bootsample.jar...
spring boot项目启动后是灰色的
07-28
你好!对于灰色的Spring Boot项目启动后的问题,可能有几种可能的原因。以下是一些常见的解决方法: 1. 检查项目依赖:确保您的项目正确引入了所需的依赖项。您可以在项目的pom.xml文件中查看和更新依赖项。确保您使用的是正确的版本,并且所有必需的依赖项都已添加。 2. 检查日志输出:启动Spring Boot项目后,它会生成日志输出。查看日志文件或控制台输出,以检查是否有任何错误或异常信息。这些信息可能会指示您项目启动失败的原因。 3. 检查端口冲突:如果您的项目使用了特定的端口号来启动,确保该端口没有被其他应用程序占用。可以尝试更改项目端口号,以避免冲突。 4. 检查配置文件:检查您的应用程序配置文件(如application.properties或application.yml)中的设置。确保所有必需的配置项都正确设置,并且没有任何错误或拼写错误。 5. 清理和重新构建项目:尝试清理和重新构建您的项目。有时,构建过程中可能会发生错误或遗漏某些文件,导致项目无法正常启动。 如果以上方法都无法解决问题,请提供更多细节,例如完整的错误消息或日志输出,以便我能够更好地帮助您解决问题。
写文章

热门文章

  • 彻底解决mysql中文乱码 284587
  • Idea小技巧 之 折叠代码块 70388
  • 成为Java顶尖程序员 ,看这11本书就够了 46734
  • Idea 无法引用类问题 28334
  • Spring MVC 之 处理Date类型 22766

分类专栏

  • Spring boot 16篇
  • Q & A 32篇
  • RPC 2篇
  • RocketMQ 8篇
  • Nepxion 13篇
  • Eureka 12篇
  • Sentinel 6篇
  • Circuit Breaker 14篇
  • Hystrix 8篇
  • Sharding-jdbc 2篇
  • Guava in Action 5篇
  • J.U.C 1篇
  • =======Language======
  • Java 54篇
  • JS 3篇
  • ====operating system====
  • JVM 2篇
  • Linux 13篇
  • Window
  • =======Data Base======
  • Oracle
  • MySQL 14篇
  • H2
  • Redis 9篇
  • MongoDB 5篇
  • ========J2EE=========
  • Architecture 71篇
  • Tomcat 8篇
  • CAS 4.0.x 5篇
  • Servlet 10篇
  • =======Big Data=======
  • Distributed 40篇
  • hadooop 1篇
  • docker 2篇
  • Zookeeper 4篇
  • Spring Boot & Cloud 30篇
  • ========Tool=========
  • Develop 8篇
  • IDE 12篇
  • =======Framework=====
  • Spring MVC Reference 22篇
  • Spring Framework 54篇
  • Dubbo 30篇
  • Spring MVC 41篇
  • MyBatis 10篇
  • Guava 25篇
  • ======Distributed======
  • Message Queue 21篇
  • 分布式配置 6篇
  • APM 1篇
  • Job 9篇
  • =======IT coder=======
  • Data Structure 2篇
  • Algorithms 7篇
  • Career 4篇
  • optimize 1篇
  • Reading note 3篇
  • Interview 2篇

最新评论

  • Java Google Sheet API

    Fly the sky_violent: 我也是 timeout了,你怎么解决的

  • Spring Cloud Gateway 之 Filter 不调用过滤链直接返回结果

    carl-zhao: 如何清除缓存呢?方便贴一下代码吗?

  • Spring Cloud Gateway 之 Filter 不调用过滤链直接返回结果

    lyq495: 直接返回,少了清除netty缓存操作,压测网关会崩溃。

  • Spring Webflux 后端处理前端请求的 4 种方式

    Jonathan Star: 前端怎么请求呀

  • Spring EL 表达式隔离不同环境的 RocketMQ

    愿乘长风破万里浪: 哪来的order?只有order-dev和order-pro呀

最新文章

  • Spring Boot 缓存教程示例
  • Idea常用插件推荐
  • 微服务链路追踪原理
2022年25篇
2021年40篇
2020年74篇
2019年2篇
2018年42篇
2017年73篇
2016年129篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢雕塑加工制作日照玻璃钢人物雕塑厂家湖北玻璃钢浮雕学校镂空雕塑公司菏泽玻璃钢仿铜雕塑常德长沙玻璃钢雕塑定制多少钱辽源玻璃钢雕塑定制淄博广场玻璃钢雕塑福建主题商场美陈走廊商场美陈哪家好玻璃钢孙悟空雕塑深圳玻璃钢字母座椅雕塑成都玻璃钢动物雕塑玻璃钢消防雕塑伊犁玻璃钢雕塑定制九江创意玻璃钢雕塑玻璃钢袋鼠雕塑广东耐高温玻璃钢花盆常用玻璃钢雕塑摆件多少钱玻璃钢人物雕塑制作哪家好江苏酒店艺术玻璃钢雕塑价格菏泽玻璃钢人物雕塑潍坊小区玻璃钢雕塑厂家鹿邑定做玻璃钢雕塑厂报价单珠海仿真玻璃钢雕塑湛江玻璃钢雕塑要求小型玻璃钢花盆研发公司上饶玻璃钢雕塑市场玻璃钢雕塑是空心的海口玻璃钢雕塑给您好的建议昆明节日商场美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化