返回顶部
首页 > 资讯 > 精选 >Nacos配置管理的示例分析
  • 708
分享到

Nacos配置管理的示例分析

2023-06-04 00:06:14 708人浏览 八月长安
摘要

这篇文章主要介绍了Nacos配置管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。硬编码配置项作为类字段的形式存在,如:public class 

这篇文章主要介绍了Nacos配置管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

硬编码

配置项作为类字段的形式存在,如:

public class AppConfig {    private int connectTimeoutInMills = 5000;    public int getConnectTimeoutInMills() {        return connectTimeoutInMills;    }    public void setConnectTimeoutInMills(int connectTimeoutInMills) {        this.connectTimeoutInMills = connectTimeoutInMills;    }}

这种形式主要有三个问题:

如果配置是需要动态修改的话,需要当前应用去暴露管理该配置项的接口,至于是 Controller 的 api 接口,还是 JMX ,都是可以做到。

另外,配置变更都是发生在内存中,并没有持久化。因此,在修改配置之后重启应用,配置又会变回代码中的默认值了,这是一个坑啊,笔者就曾经掉进去过,爬了好一会才上岸。

最后一个问题,就是当你有多台机器的时候,要修改一个配置,每一台都得去操作一遍,运维成本可想而知,极其蛋疼。

配置文件

spring 中常见的 properties、yml 文件,或其他自定义的,如,“conf”后缀等:

# application.propertiesconnectTimeoutInMills=5000

相比“硬编码”的形式,它解决了第二个问题,持久化了配置。但是,另外两个问题并没有解决,运维成本依旧还是很高的。

配置动态变更,可以是通过类似“硬编码”暴露管理接口的方式,这时,代码中会多一步持久化新配置到文件的逻辑。或者,简单粗暴点,直接登录机器上去修改配置文件,再重启应用,让配置生效。当然,你也可以在代码中增加一个定时任务,如每隔 10s 读取配置文件内容,让最新的配置能够及时在应用中生效,这样也就免去了重启应用这个“较重”的运维操作。

通过增加“持久化逻辑”、“定时任务”让“配置文件”的形式比“硬编码”前进了一小步。

DB 配置表

这里的 DB 可以是 MySQL 等的关系型数据库,也可以是 Redis 等的非关系型数据库。数据表如:

CREATE TABLE `config` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  `key` varchar(50) NOT NULL DEFAULT '' COMMENT '配置项',  `value` varchar(50) NOT NULL DEFAULT '' COMMENT '配置内容',  `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  PRIMARY KEY (`id`),  UNIQUE KEY `idx_key` (`key`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='配置信息';INSERT INTO `config` (`key`, `value`, `updated_time`, `created_time`) VALUES ('connectTimeoutInMills', '5000', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

它相对于前两者,更进一步,将配置从应用中抽离出来,集中管理,能较大的降低运维成本。

那么,它能怎么解决动态更新配置的问题呢?据我所知,有两种方式。

其一,如同之前一样,通过暴露管理接口去解决,当然,也一样得增加持久化的逻辑,只不过,之前是写文件,现在是将最新配置写入数据库。不过,程序中还需要有定时从数据库读取最新配置的任务,这样,才能做到只需调用其中一台机器的管理配置接口,就能把最新的配置下发到整个应用集群所有的机器上,真正达到降低运维成本的目的。

其二,直接修改数据库,程序中通过定时任务从数据库读取最新的配置内容。

“DB 配置表”的形式解决了主要的问题,但是它不够优雅,带来了一些“累赘”。

Nacos 配置管理

Nacos 真正将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。

应用自身既不需要去添加管理配置接口,也不需要自己去实现配置的持久化,更不需要引入“定时任务”以便降低运维成本。Nacos 提供的配置管理功能,将配置相关的所有逻辑都收拢,并且提供简单易用的 SDK,让应用的配置可以非常方便被 Nacos 管理起来。

如果是在 Spring 中使用 Nacos,只需三个步骤即可:

  • 添加依赖

<dependency>    <groupId>com.alibaba.nacos</groupId>    <artifactId>nacos-spring-context</artifactId>    <version>${latest.version}</version></dependency>
  • 添加 @EnableNacosConfig 注解启用 Nacos Spring 的配置管理服务。以下示例中,我们使用 @NacosPropertySource 加载了 dataid 为 example 的配置源,并开启自动更新:

@Configuration@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))@NacosPropertySource(dataId = "example", autoRefreshed = true)public class NacosConfiguration {}
  • 通过 Spring 的 @Value 注解设置属性值。

注意:需要同时有 Setter方法才能在配置变更的时候自动更新。

public class AppConfig {    @Value("${connectTimeoutInMills:5000}")    private int connectTimeoutInMills;    public int getConnectTimeoutInMills() {        return connectTimeoutInMills;    }    public void setConnectTimeoutInMills(int connectTimeoutInMills) {        this.connectTimeoutInMills = connectTimeoutInMills;    }}

感谢你能够认真阅读完这篇文章,希望小编分享的“Nacos配置管理的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Nacos配置管理的示例分析

本文链接: https://lsjlt.com/news/235981.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Nacos配置管理的示例分析
    这篇文章主要介绍了Nacos配置管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。硬编码配置项作为类字段的形式存在,如:public class ...
    99+
    2023-06-04
  • MySQL中多实例配置和管理的示例分析
    这篇文章主要介绍MySQL中多实例配置和管理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! mysql的多实例有两种方式可以实现,两种方式各有...
    99+
    2024-04-02
  • springboot使用nacos的示例分析
    springboot使用nacos的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。pom.xml:<xml version="1.0"...
    99+
    2023-06-22
  • RAC_OCR管理的示例分析
    这篇文章给大家介绍RAC_OCR管理的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。管理OCROCR是Oracle RAC配置信息仓库,它管理集群...
    99+
    2024-04-02
  • tsconfig.json配置的示例分析
    这篇文章主要为大家展示了“tsconfig.json配置的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“tsconfig.json配置的示例分析”这篇文...
    99+
    2024-04-02
  • IPTABLES配置的示例分析
    这篇文章将为大家详细讲解有关IPTABLES配置的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Iptables配置实例:  Iptables配置的目的,一个是防止公网的入侵,一个是让内...
    99+
    2023-06-13
  • VSFTP配置的示例分析
    这篇文章主要介绍了VSFTP配置的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用rpm命名可顺利安装该软件包。 # rpm -ivh vsftpd-2.0.1-5...
    99+
    2023-06-13
  • VS2003配置的示例分析
    这篇文章给大家分享的是有关VS2003配置的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。下面为介绍VS2003配置的全过程:(1) 直接安装VS2003(2) 安装VS2003 SP1补丁,下载地址如下...
    99+
    2023-06-17
  • FreeRTOS动态内存分配管理示例分析
    本篇内容主要讲解“FreeRTOS动态内存分配管理示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“FreeRTOS动态内存分配管理示例分析”吧!动态内存管理FreeRTOS提供5种动态内存...
    99+
    2023-06-29
  • 配置管理Java类库Commons Configuration 1.8发布的示例分析
    配置管理Java类库Commons Configuration 1.8发布的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Commons Configuration...
    99+
    2023-06-17
  • Nacos客户端配置中心缓存动态更新的示例分析
    这篇文章将为大家详细讲解有关Nacos客户端配置中心缓存动态更新的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Nacos 作为配置中心,当应用程序去访问Nacos动态获取配置源之后,会缓存到本地...
    99+
    2023-06-29
  • SpringBoot自动配置原理的示例分析
    这篇文章主要介绍了SpringBoot自动配置原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、SpringBoot是什么SpringBoot 的诞生就是为了简...
    99+
    2023-06-22
  • Zabbix snmptrap配置的示例分析
    这篇文章给大家分享的是有关Zabbix snmptrap配置的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。服务器通过snmptrap主动上报告警,在zabbix配置snmptrap监控也是很简单的。1....
    99+
    2023-06-04
  • MongoDB索引管理的示例分析
    这篇文章给大家分享的是有关MongoDB索引管理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。索引是提高查询查询效率最有效的手段。索引是一种特殊的数据结构,索引以易于遍...
    99+
    2024-04-02
  • mysql用户管理的示例分析
    这篇文章将为大家详细讲解有关mysql用户管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。说明用户的功能是登录MySQL数据库,管理MySQL对象,通过user表查看所有用户。mysql用户帐...
    99+
    2023-06-20
  • Linux磁盘管理的示例分析
    这篇文章给大家分享的是有关Linux磁盘管理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux的磁盘管理是Linux管理员非常重要的必须技能,Linux磁盘管理好坏直接关系到整个系统的性能问题。一...
    99+
    2023-06-27
  • Docker网络管理的示例分析
    这篇文章主要为大家展示了“Docker网络管理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Docker网络管理的示例分析”这篇文章吧。一:简介 CNM(Container ...
    99+
    2023-06-04
  • redis基础配置的示例分析
    这篇文章将为大家详细讲解有关redis基础配置的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis的ms主从集群作用:1、主从备份防止宕机2、读写分离,分担...
    99+
    2024-04-02
  • Redis3.2.6配置文件的示例分析
    小编给大家分享一下Redis3.2.6配置文件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis3.2.6最新配...
    99+
    2024-04-02
  • Mysql配置文件的示例分析
    这篇文章给大家分享的是有关Mysql配置文件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。[mysqld]port = 3306serverid = 1socket =...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作