我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java nacos动态配置实现流程详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java nacos动态配置实现流程详解

一、前言

使用动态配置的原因: properties 和 yaml 是写到项目中的,好多时候有些配置需要修改,每次修改就要重新启动项目,不仅增加了系统的不稳定性,也大大提高了维护成本,非常麻烦,且耗费时间。

使用动态配置,则可以避免这些麻烦,可以动态的修改配置,不需要重新启动项目。

nacos配置中心,可以使得配置标准化、格式统一化,当配置信息发生变动时,修改实时生效,无需要重新重启服务器,就能够自动感知相应的变化,并将新的变化统一发送到相应程序上,快速响应变化。

本次环境使用版本:NACOS1.4.2; spring-boot 2.3.9.RELEASE;nacos-config-spring-boot-starter 0.2.1

二、在nacos上创建配置文件

创建配置文件

在默认命名空间中,创建一个配置文件

配置说明

  • Data ID —— 用于项目读取名称,spring-nacos 动态配置命名规范为 :{prefix}-{spring.profiles.active}.{file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,就是环境的命名,比如 test 环境, dev 环境;spring.profiles.active 可以为空,为空着不区分环境信息,dataId 的拼接格式变成 {prefix}.{file-extension}。
  • file-exetension 为配置内容的数据格式,一般常用 properties 和 yaml 类型。

说明:

  • 我这次修改的项目是网关,项目名称 :gateway(spring.application.name= gateway)
  • 没有使用环境配置
  • 所以 nacos 的配置文件为: {prefix}.{file-extension} 即 gateway.yml
  • 如果有配置环境的,可以为 {prefix}-{spring.profiles.active}.{file-extension} 即 gateway-dev.yml

本次配置文件名称为 gateway.yml

注意: 项目启动时,nacos-config 会自动加载以下文件,故以下文件名称都可以作为默认动态配置的文件格式。

  • icp-gateway-dev.yml,icp-gateway.yml,icp-gateway,(说明,这三个文件,可以指定命名 nacos 分组)
  • common.yml (该文件为默认分组,DEFAULT_GROUP)

添加测试使用的配置 nacosConfigDemmo: NAME1

说明: 本次配置项目,分组名称为 ICP_PLATFORM (注意:分组名称建议使用下划线 _ ,不建议使用 中横线 - ,中横线会有几率出现不能读取的问题,使用连接符请注意使用;分组名可以自定,如果要区分命名空间,需要到 nacos 命名空间 中新建 命名空间)

发布并检查配置文件

编辑完成之后,直接点击发布,会提示新建完成

点击确定,然后点击返回配置中心,在配置列表中能找到自己的配置文件,确保文件内容正确即可

至此,配置文件完成,接下来在项目中使用这个配置文件。

三、 修改项目配置与动态读取配置文件

添加 nacos 动态配置依赖

在 pom.xml 文件中,添加依赖。

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.1</version>
</dependency>

修改项目配置文件,读取 nacos 中的配置内容

# 指定启动端口
server:
  port: 7200
spring:
  application:
  # 指定服务名称
    name: gateway
  # 项目运行环境,可以搭配在 nacos 动态配置文件名上面,不同环境使用不同的动态配置
  profiles:
    active: dev
  cloud:
    nacos:
      config:
          server-addr: 127.0.0.1:8848  #nacos 的注册地址
        file-extension: yml  #动态配置文件的 格式。就是 nacos 中的动态配置,这里是 yml
        group: ICP_PLATFORM  #nacos 动态配置的分组,要与 nacos 配置文件保持一致
#        namespace:   #namespace 是nacos 的命名空间,我这儿是默认空间,就不配置了 

在controller与service中使用动态配置

controller 代码:

import com.insupro.search2.service.IIndexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/demo")
public class nacosConfigDemmo {
    @Autowired
    private DemoService demoService;
    @GetMapping("/name")
    public Object showDemoName(){
        return demoService.showDemoName();
    }
}

service 接口代码:

public interface IIndexService {
	Object showDemoName();
}

service 实现代码:

import com.insupro.search2.service.demoService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
@Service
// 注意,要自动刷新配置,需要 @RefreshScope 这个注解
@RefreshScope
public class demoServiceImpl implements demoService{
	
    @Value("${nacosConfigDemmo}")
    private String demoName;
    @Override
    public Object showDemoName(){
        return demoName;
    }
}

运行,请求接口地址,得到响应值:

postman 请求,第一次响应,值为 NAME2

修改 nacos 配置文件,将 nacosConfigDemmo: NAME1 改为 nacosConfigDemmo: NAME2 并发布

等待控制台打印: Refresh keys changed: [nacosConfigDemmo],则动态配置已经生效

再次请求,发现返回值已经改变:

请求结果,NAME1 已经变成 NAME2,项目不需要重启,动态配置已经生效。

四、 动态配置网关的使用

导入配置,网关不进行权限校验的路径

获取配置文件,生成 bean

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
// 自动刷新机制,需要 get 方法支撑
@Setter
@Getter
// 获取配置文件
@ConfigurationProperties(prefix = "security.ignore")
// 开启自动刷新
@RefreshScope
public class SecurityProperties { 
    private PermitProperties ignore = new PermitProperties();
}

配置文件实体类

import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class PermitProperties {
    
    private String[] httpUrls = {};
    public String[] getUrls() {
        if (httpUrls == null || httpUrls.length == 0) {
            return new ArrayList<>();
        }
        List<String> list = new ArrayList<>();
        for (String url : httpUrls) {
            list.add(url);
        }
        return list.toArray(new String[list.size()]);
    }
 }

至此,导入自动配置完成,可以根据自己的业务代码进行网关的配置与使用。

但是!!注意!! 如果在配置文件中调用配置,则需要在配置文件中使用 @RefreshScope 注解,用于刷新配置。因为配置文件在项目启动时便已经完成加载。

例如:

@Configuration
public class ResourceServerConfiguration {
    @Autowired
    private SecurityProperties securityProperties;
    // 使用了 @Configuration 定义配置文件,并在配置类中使用 @Bean 装配 bean,此时如果在自动装配出没有使用 @RefreshScope 注解,则自动配置不会生效。
    @Bean
    @Autowired(required = false)
    @RefreshScope
    SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        if (securityProperties.getIgnore().getUrls().length > 0) {
            authorizeExchange.pathMatchers(securityProperties.getIgnore().getUrls()).permitAll();
        }
        // TODO 余下自行业务代码 …………
        return http.build();
    }
}

到此这篇关于Java nacos动态配置实现流程详解的文章就介绍到这了,更多相关Java nacos动态配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java nacos动态配置实现流程详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringCloud将Nacos作为配置中心实现流程详解

这篇文章主要介绍了Springcloud中的NacosConfig服务配置,本文以用户微服务为例,进行统一的配置,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
2022-11-13

springcloud nacos动态线程池Dynamic tp配置接入实战详解

这篇文章主要为大家介绍了springcloud nacos动态线程池Dynamic tp配置接入实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-19

Nacos+Spring Cloud Gateway动态路由如何配置实现

小编给大家分享一下Nacos+Spring Cloud Gateway动态路由如何配置实现,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言  Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦
2023-06-20

Spring Cloud 整合 nacos实现动态配置中心的详细步骤

这篇文章主要介绍了Spring Cloud 整合 nacos 实现动态配置中心,整合步骤是通过添加依赖新建nacos配置,本文分步骤通过实例代码给大家详细讲解,需要的朋友可以参考下
2022-11-13

SpringCloudGateway自动装配实现流程详解

SpringCloudGateway旨在为微服务架构提供一种简单有效的、统一的API路由管理方式。SpringCloudGateway作为SpringCloud生态系中的网关,它不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等
2022-11-13

Spring基于xml实现自动装配流程详解

自动装配是使用spring满足bean依赖的一种方法,spring会在应用上下文中为某个bean寻找其依赖的bean,Spring中bean有三种装配机制,分别是:在xml中显式配置、在java中显式配置、隐式的bean发现机制和自动装配
2023-01-03

详解Centos8 配置静态IP的实现

安装centos 8之后,重启启动网络时,会出现以下报错 报错信息如下:Failed to start network.service: Unit network.service not found.意思为无法重启网络服务,原因是无法找到n
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录