SpringCloudAlibaba项目打成war后无法注册到Nacos,无法连接到Nacos Server

news2024/12/23 17:31:01

SpringCloudAlibaba项目打成war后无法注册到Nacos,无法连接到Nacos Server

  • 背景
  • 原因
  • 解决
  • 重新打包、部署:正常!

参考:https://www.jb51.net/article/233940.htm

背景

正常jar(使用内嵌tomcat)包是可以连接并注册到Nacos的,但是将项目改成War(使用外部tomcat)之后,就不行了;但是项目可正常启动。

原因

Nacos的注册类NacosAutoServiceRegistration 进去之后可以发现它继承了SpringCloud的AbstractAutoServiceRegistration 注册类,在AbstractAutoServiceRegistration 中有一个绑定监听事件,他的作用就是监听到内置容器启动完成之后获取容器端口向注册中心注册,如下图:
在这里插入图片描述
因为这个接口只可以监听内置容器,所以我们就可以得出结论:之所以会出现上面的问题,就是因为使用外部容器时,不会触发监听事件,所以也就注册不到nacos中。

因此我们可以借助SpringBoot提供的ApplicationRunner接口,这个接口的作用就是在应用启动完成之后执行一些定义好的初始化操作。所以我们可以在服务启动成功之后,通过这个接口将我们的项目注册到Nacos中,下面看代码

解决

import java.lang.management.ManagementFactory;
import java.util.Set;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.Query;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;

@Component
public class NacosConfig implements ApplicationRunner {

    @Autowired(required = false)
    private NacosAutoServiceRegistration registration;

    @Value("${server.port}")
    Integer port;

    @Override
    public void run(ApplicationArguments args) {
        if (registration != null && port != null) {
            //如果getTomcatPort()端口获取异常,就采用配置文件中配置的端口
            Integer tomcatPort = port;
            try {
                tomcatPort = new Integer(getTomcatPort());
            } catch (Exception e) {
                e.printStackTrace();
            }
            registration.setPort(tomcatPort);
            registration.start();
        }
    }

    /**
     * 获取外置tomcat端口
     */
    public String getTomcatPort() throws Exception {
        MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
        Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"), Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
        String port = objectNames.iterator().next().getKeyProperty("port");
        return port;
    }
}

重新打包、部署:正常!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp源码编译打包App上架发布详细教程

基础配置 App打包&#xff08;使用Hbuilder进行App打包&#xff09; 视频教程 视频地址&#xff1a; https://www.bilibili.com/video/BV1Kg411g7cb 一、修改接口地址 1.打开uni-app下config/app.js修改接口地址&#xff0c;将下图红框中的地址修改成您的域名 二、配置参…

研发工程师玩转Kubernetes——安装microk8s和Docker

《研发工程师玩转Kubernetes》将立足于实操&#xff0c;试图由浅入深探索Kubernetes世界。于是在技术选型和内容上也将由易到难&#xff0c;由简单到复杂。 为了降低进入的门槛&#xff0c;我们前期将不考虑多实例&#xff08;机器&#xff09;的部署&#xff0c;而采用单机部署…

ThreadLocal 的原理讲述 + 基于ThreadLocal实现MVC中的M层的事务控制

ThreadLocal 的原理讲述 基于ThreadLocal实现MVC中的M层的事务控制 文章目录 ThreadLocal 的原理讲述 基于ThreadLocal实现MVC中的M层的事务控制每博一文案1. ThreadLocal 给概述2. 抛砖引玉——>ThreadLocal3. ThreadLocal 的模拟编写4. ThreadLocal 源码原理分析5. Thre…

云厂商降价潮背后:来中小企业战场「拼刺刀」

如果说过往云厂商的降价打响的是从C端进军B端的营销战&#xff0c;那么在这一轮降价潮背后&#xff0c;对应的则是云厂商从大型KA客户向中小企业进军的信号&#xff0c;强被集成&#xff0c;强获客。 云厂商又一轮降价潮袭来。 5月16日&#xff0c;移动云宣布部分产品线最高降…

技术探秘:揭秘Bean Factory与FactoryBean的区别!

大家好&#xff0c;我是小米&#xff0c;一个热衷于技术分享的29岁小编。今天&#xff0c;我们来聊一聊在Spring框架中常用的两个概念&#xff1a;beanFactory和FactoryBean。它们虽然看似相似&#xff0c;但实际上有着不同的用途和作用。让我们一起来揭开它们的神秘面纱吧&…

SaleSmartly聊天机器人如何帮助您的电商业务(二)

上文为大家介绍了两类机遇SaleSmartly&#xff08;ss客服)强大的自动化编辑器构建的两类聊天机器人&#xff0c;接下来继续为大家介绍两种类型的聊天机器人。SaleSmartly&#xff08;ss客服&#xff09;可构建的聊天机器人还有以下两类&#xff1a; 3. NLP聊天机器人 SaleSma…

Datax+Datax-web2.1实现MySQL数据库数据同步(二)

目录 流程1、创建项目2、创建数据源3、创建任务模板4、构建任务5、执行同步任务 安装文档参考&#xff1a;https://blog.csdn.net/zhanremo3062/article/details/130728287 流程 这里以2.1.2版本为例&#xff0c;datax-web使用起来还是很顺滑的&#xff0c;操作流程跟其他任务…

结合自由能计算

结合自由能计算 打分函数 背景 打分函数广泛应用于基于结构的计算辅助药物设计&#xff0c;其通过定量化评估药-靶的相互作用为药物研发中的药效评估提供理论依据&#xff0c;提高活性化合物甄别的效率。定量评估药物与靶标蛋白的相互作用通常分为两步&#xff0c;一步是对接…

Android之 fragment页面碎片详解

一 简介 1.1 Fragment是Android3.0新增的概念&#xff0c;中文意思是“碎片”&#xff0c;它与Activity非常相似&#xff0c;是用来描述一些行为或者一部分用户界面 1.2 可以在一个单独的Activity中建立多个Fragment面板&#xff0c;也可以在多个Activity中复用Fragment 1.3…

【OpenCV】C++红绿灯轮廓识别+ROS话题实现

目录 前言 一、背景知识 Opencv轮廓检测 ROS相关知识 二、环境依赖 三、具体实现 Step1&#xff1a;初始化ROS&#xff0c;订阅话题 Step2&#xff1a;接收话题&#xff0c;进入回调 1. 帧处理 2. 膨胀腐蚀处理 Step3&#xff1a;红绿特征处理 1. 提取绘制轮廓 2…

20230517提升cv1826的打印等级

20230517提升cv1826的打印等级 2023/5/17 17:43 https://www.xitongjiaocheng.com/linux/2017/53494.html Linux内核log等级与printk打印消息控制 时间&#xff1a;2017-03-13 出处&#xff1a;系统之家复制分享人气(206次) 【大中小】 printk打印消息控制 // linux/includ…

认养农业小程序开发 赋予农业发展新模式

传统农业发展到今天&#xff0c;无论是规模还是方式都发生了很大的改变&#xff0c;尤其是在信息化时代影响下&#xff0c;智慧农业一步步发展起来&#xff0c;通过认养这种新模式与都市中想要体验农场乐趣的人群联系起来&#xff0c;既满足了都市人群体验农场生活乐趣的目的也…

720vr全景线上看车帮助企业快速对接到意向客户

360VR全景看车可以高精度还原线下展厅和各类汽车车型&#xff0c;进入VR汽车3d展厅&#xff0c;实现360度无死角VR看车&#xff0c;可以任意的查看和缩放&#xff0c;消费者根据自己的喜好更换车身的颜色&#xff0c;一键对比不同车型的外观、性能、耗能等&#xff0c;不用出门…

小程序架构足够安全吗?数据安全如何保障?

小程序大家已经再熟悉不过了&#xff0c;就是一种在移动操作系统中运行的轻量级应用程序&#xff0c;小程序发展这么多年来&#xff0c;是中国 IT 行业里为数不多的能够真正影响到普通程序员的创新成果。 当然随着小程序的流行&#xff0c;小程序的各个方面都是开发者讨论的热…

Navicat 数据备份与恢复功能 | 有效预防误删误改、删库跑路、软硬件故障造成的数据丢失

当今社会已进入了数据爆炸的时代&#xff0c;数据成为企业最重要的资产之一。如果没有采取数据备份和数据恢复手段与措施&#xff0c;就会导致数据的丢失&#xff0c;有时造成的损失是无法弥补估量的。市场上有很多数据备份的方法&#xff0c;今天我们给大家分享广受业界好评的…

首届百度商业AI技术创新大赛重磅启动,以前沿科技革新生产力

随着生成式AI在全球范围的热议&#xff0c;你可以想象在不远的将来AI将与你的工作、生活、出行等各种场景紧密相连。正如百度创始人、董事长兼CEO李彦宏所说&#xff1a;“以深度学习、算法为代表的人工智能革命是第四次科技革命”。 作为拥有强大互联网基础的领先AI公司&…

神经网络:Zero2Hero 3 - Tanh、Gradient、BatchNormal

Zero2Hero : 3 - Tanh、Gradient、BatchNormal 接上篇&#xff0c;对MLP模型有进一步进行了修改&#xff0c;增加BatchNormal、和激活函数。深入研究深层网络的内部&#xff0c;激活、反向传递梯度以及随机初始化的陷阱。BatchNormal的作用。 import torch import torch.nn.f…

python:图形用户界面GUI(模拟登录、计算器...)

文章目录 一、Tkinter简介1、第一个tkinter窗口2、在窗口内加入组件2.1 思考题&#xff08;问题与答案&#xff09; 3、坐标管理器 二、Tkinter组件及其属性1、Label组件和Entry组件2、计算器代码 引言&#xff1a;我们以QQ为例&#xff0c;当我们点击QQ图标时候&#xff0c;它…

SpringBoot整合MyBatis-Plus实现增删改查

简介 MyBatis-Plus (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑损耗小&#xff1a;启…

一个有趣的avs编码器(注意,是avs,而不是avs2噢)

本章附件是一个清华大学写的关于avs编解码器: https://download.csdn.net/download/weixin_43360707/87793302 该编码器遵循了stuffing bit: 打开文件夹后&#xff0c;如下&#xff1a; 可以看出这个是个跨平台的工程&#xff0c;提供了windows vs2015的工程文件sln&#x…