springboot 2.0以上版本如何启动多端口监听@杨章隐

查了很多网上的教程,包括知乎高赞的,都是基于1.0的,springboot2.0已经遗弃一部分相关的class和方法或者类名方法名被修改导致有些入门着急找解决方案的朋友有点懵逼。所以写这篇东西

application.properties文件代码:
 

server.port=${appPort:8080}
server.additionalPorts=3050

创建一个 ApplicationConfig,代码如下 ,大部分的教程会让你用EmbeddedServletContainerCustomizer,但是Spring Boot2.0以上配置嵌入式Servlet容器时EmbeddedServletContainerCustomizer类被WebServerFactoryCustomizer替代


import com.mengyou.bowling.util.StringUtilDeer;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class ApplicationConfig {

    @Value("${server.additionalPorts}")
    private String additionalPorts;

    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        Connector[] additionalConnectors = this.additionalConnector();
        if (additionalConnectors != null && additionalConnectors.length > 0) {
            tomcat.addAdditionalTomcatConnectors(additionalConnectors);
        }
        return tomcat;
    }

    private Connector[] additionalConnector() {
        if (StringUtilDeer.isEmpty(this.additionalPorts)) {//这里的isEmpty只是判断这个变量是否存在,StringUtilDeer是我封装的一个工具类,你可以修改成判断他的长度和是否等于null
            return null;
        }
        String[] ports = this.additionalPorts.split(",");
        List<Connector> result = new ArrayList<>();
        for (String port : ports) {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            connector.setPort(Integer.valueOf(port));
            result.add(connector);
        }
        return result.toArray(new Connector[] {});
    }
}

最后在我们springboot的启动类上增加@Import

@Import一些说明补充

1、@Import只能用在类上 ,@Import主要是通过快速导入的方式实现把实例加入到spring的IOC容器之中;

2、加入IOC容器的方式有很多种,@Import注解是其中一种,@Import注解也可以可以用于导入第三方包 ,当然使用@Bean也可以,主要看习惯

@SpringBootApplication
@Import({ApplicationConfig.class})
public class BowlingApplication {

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

}

摸索参考

Springboot2.0踩得坑(embeddedservletcontainercustomizer)_特立独行的蜗牛的博客-CSDN博客

ConfigurableEmbeddedServletContainer (Spring Boot Docs 1.3.7.RELEASE API)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
在Spring Boot 2.0及以上版本中,可以通过以下步骤配置两个端口: 1. 在`application.properties`或`application.yml`配置文件中添加以下属性: ```yaml server.port=8080 # 添加第二个端口配置 server.additional-ports=9090 ``` 2. 创建一个自定义的`WebServerFactoryCustomizer` bean,并在其中进行端口配置。可以在应用的主类上添加`@Configuration`注解,并定义一个bean方法来创建自定义的`WebServerFactoryCustomizer`。 ```java import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ServerConfig { @Bean public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() { return (WebServerFactoryCustomizer<ConfigurableWebServerFactory>) factory -> { if (factory instanceof ConfigurableServletWebServerFactory) { // 配置第二个端口 ((ConfigurableServletWebServerFactory) factory).setPort(9090); } }; } } ``` 这里使用了`ConfigurableServletWebServerFactory`来进行配置。通过创建一个自定义的`WebServerFactoryCustomizer` bean,并实现`WebServerFactoryCustomizer<ConfigurableWebServerFactory>`接口,在`customize()`方法中对第二个端口进行配置。 这样配置完成后,你的Spring Boot应用就会同时监听8080和9090两个端口。你可以根据需求进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨章隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值