SpringBoot 启动运行成功,localhost无法访问连接

本文详细记录了作者在SpringBoot项目中遇到的问题:项目启动无误,但localhost无法访问。经过一系列排查,作者发现是SpringBoot与Netty整合时,由于线程和端口冲突导致Tomcat无法正常启动。通过调整代码,为Netty监听创建单独线程,解决了问题。文章提醒开发者在使用Netty与SpringBoot结合时要注意线程和端口的管理。
摘要由CSDN通过智能技术生成

SpringBoot 启动运行成功,localhost无法访问连接

问题描述

本项目是一个物联网项目,技术框架 SpringBoot+Netty+MySql+MybatisPlus+Swagger

今天运行SpringBoot项目过程中,项目代码没有出现报错情况,在SpringBoot初始化成功之后,在web端访问api文档时,出现了无法访问此网站——localhost拒绝连接访问请求。针对这一问题我开始进行排查解决。
浏览器拒绝访问的情况截图

问题的排除

对于这一出现的问题,我脑海中可能出现了几中假设通过这些假设,对出现问题原因的范围进行缩小。有利于进行问题排查

  1. 电脑关于网络设置出现了问题?
  2. 浏览器设置出现问题?
  3. 项目程序代码出现了问题

在网上针对假设1、假设2的问题我也发现了自己电脑中丢失了host文件,进行了解决之后,运行项目之后,仍然无法访问。于是开始针对本项目程序代码问题进行各种方向排查。

项目工程代码可能的原因

查询中文网站的帖子,花了一下午的时间,一 一进行排查解决,但是问题仍然没有得解决。我于是新建了一个SpringBoot工程demo ,写了一个例子发现能够在浏览器正常访问,之后在demo项目中的maven文件中加入swagger相关依赖包进行测试排查。在运行项目之后,可以正常在浏览器上访问。经过这一步可以再次缩小出现原因的范围。
图1 demo工程正常启动日志
图2 出现问题代码的SpringBoot启动日志

原因的发现和锁定

在咨询实验室同学进行讨论无果之后,我开始仔细比较demo工程和问题代码文件的异同,进行细致比较,我还怀疑是不是pom依赖包版本不兼容出现的问题。当进一步排查之后,我开始查看demo工程SpringBoot启动日志的时候与我自己出现问题的工程文件的SpringBoot启动日志进行比较。我注意到两边项目运行日志有不同。问题工程的SpringBoot的内嵌tomcat只是完成了初始化并没有实现开始启动,而且项目工程的Application也没有正式start。

于是,我根据日志的不同,对问题进行分析,因为本菜鸟的工程是一个物联网项目,需要使用Netty,同时需要开启一个端口监听下位机设备发送的数据信息。而tomcat也需要一个端口(默认8080)才能在浏览器访问。
之所以出现问题,就是因为我只开了一个线程,而且是项目工程是先完成的tcp端口数据收发,之后把项目进行tomcat部署。所以问题的原因在于,单线程的情况下,程序访问监听了TCP的端口,tomcat在初始化之后无法访问到8080端口。问题的原因就是线程
后来百度发现这一个帖子也再一次印证了问题所在,关于SpringBoot+Netty打war包部署外部tomcat导致Tomcat不能访问的解决办法

问题的解决

原来是在项目入口原代码设置了一个监听器,完成对tcpserver的监听 netty中完成数据的接收和指令下发。

/程序入口
@SpringBootApplication
@MapperScan("com.xxx.miot.mapper")
//@EnableConfigurationProperties
//@EnableTransactionManagement
@EnableSwagger2
@ComponentScan("com.xxx.miot.*")
public class MiotApplication  implements CommandLineRunner {
   

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

    @Autowired

    private TcpServer server;

    @Override
    public void run(String... args
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值