一、监听器的添加
在 Nacos配置文件如何初始化的 里面,讲到了 NacosConfigApplicationContextInitializer,其实这里不但会做配置文件加载的初始化,还会做监听器的初始化
2025/9/22大约 8 分钟
在 Nacos配置文件如何初始化的 里面,讲到了 NacosConfigApplicationContextInitializer,其实这里不但会做配置文件加载的初始化,还会做监听器的初始化
Nacos 自定义了一个初始化的类 NacosConfigApplicationContextInitializer,继承关系如下
public class NacosConfigApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {}
最近有一个需求,需要把Nacos上某个配置文件,从A_data-id迁移到B_data-id上。
本质上就是看删除某个配置,会不会影响到正在运行的服务。我们知道Nacos有一个功能是热更新,在Nacos控制台上修改变量会实时被应用感知,那如果删除某个热更新变量,会不会导致我们正在运行的环境这个值为 null呢?
答案是不会
比如某个变量原本的值是 1,在Nacos删除这个变量发布后,未重启的服务读取的还是 1。
这虽然和理解上热更新有一点点差异(代码的值不应该和Nacos时刻保持一致吗?)但我个人觉得也合理,这是一种特殊的保护机制。
nacos需要用到MySQL持久化,需要在数据库创建如下表
https://github.com/alibaba/nacos/blob/2.3.0/config/src/main/resources/META-INF/nacos-db.sql
version: '3'
services:
nacos:
image: nacos/nacos-server:v2.3.0-slim
# 容器名称
container_name: nacos
# 端口映射
ports:
- 8848:8848
- 9848:9848
- 9849:9849
# 容器权限
privileged: true
# 参数设置
environment:
JVM_XMS: 128m
JVM_XMX: 128m
JVM_MS: 64m
JVM_MMS: 64m
MODE: standalone
NACOS_REPLICAS: 1
PREFER_HOST_MODE: ip
volumes:
- ./logs:/home/nacos/logs
- ./plugins:/home/nacos/plugins
- ./data:/home/nacos/data
- ./config/application.properties:/home/nacos/conf/application.properties
networks:
nacos:
aliases:
- nacos_2.3.0
networks:
nacos:
name: nacos_2.3.0
driver: bridge