Springboot的server.port和server.http.port

本文介绍了如何在SpringBoot项目中配置一个同时支持HTTPS和HTTP的服务器,包括设置不同端口和创建特定的HTTP连接器。

需求

最近springboot项目为了安全启用了https,但是项目中还写了接口供其他程序调用,这个接口必须是http的。研究发现原来一个springboot项目是可以有一个http端口和一个https端口的。

正文

配置文件如下:

#http port
server.http.port=1234
#https port
server.port=1233

项目启动的时候使用的是server.port端口。

配置的http端口要想使用需要写下面这样一个配置类:

import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpsConfig {
    @Value("${server.http.port}")
    private Integer httpPort;

    @Bean
    public ServletWebServerFactory serverFactory() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());
        return tomcat;
    }
    /**
     * 配置http
     * @return
     */
    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);
        return connector;
    }

}

之后写接口的时候便可以使用这个端口了。 

 

### 解决 Spring Boot 中 `server.port` 不生效的问题 当遇到 `server.port` 配置项未按预期工作的情况时,可能由多种因素引起。以下是几种常见原因及其解决方案。 #### 1. 多个端口配置冲突 如果项目中有多个地方设置了服务器端口号,则可能会发生覆盖现象。确保只在一个位置设置此属性,并且该位置优先级最高。通常情况下,在 `application.properties` 或者 `application.yml` 文件中的定义具有较高优先级[^2]。 ```properties # application.properties server.port=8443 ``` #### 2. 使用命令行参数启动应用程序 有时会通过命令行传递 `-Dserver.port=` 参数来指定端口。这种方式将会覆盖掉配置文件里的设定。检查是否有这样的做法存在;如果有,请移除或调整这些外部传入的参数。 #### 3. IDE 运行配置错误 开发人员经常会在集成开发环境中直接点击按钮运行程序而忽略了IDE本身提供的额外选项。确认所使用的IDE(如IntelliJ IDEA、Eclipse等)并没有自定义的服务启动参数影响到了实际监听地址的选择。 #### 4. 自动化构建工具的影响 对于Maven或者Gradle这类自动化构建工具来说,它们也可能携带某些默认行为改变服务的行为模式。特别是当涉及到重新打包操作的时候需要注意排除不必要的插件干扰[^1]。 ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 确保 devtools 正确包含 --> <excludeDevtools>false</excludeDevtools> </configuration> </plugin> </plugins> </build> ``` #### 5. 应用上下文路径问题 虽然这不会直接影响到端口分配,但如果指定了不同的应用上下文路径(`server.servlet.context-path`),那么访问URL的形式会发生变化,容易让人误以为端口不对劲。因此也建议核查这一点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值