自己实现一个简单的Nacos配置启动类

此文章只是简单的实现了对应的nacos配置中心的核心功能,只是模拟了nacos配置的核心功能,包括一些配置的加载,动态更新。

直接上代码。

首先我们要写一个starter,需要引入对应的stater依赖。并且配置对应的spring.factories

pom依赖如下所示:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

spring.factories 如下:加载了两个类:

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
edu.mbb.cloud.nacos.ConfigBootstrapConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
edu.mbb.cloud.nacos.ConfigAutoConfiguration

BootstrapConfiguration 是指加载bootstrap.yaml或者properties的时候加载的类。此时对应的配置文件已经加载进去对应的容器中,对应的我们已经取到了对应的bootstarp的配置信息,这也就是为啥我们的配置的nacos 信息要在对应的bootstrap.yaml中。
@Configuration
@ConditionalOnProperty(name = "spring.mbb.enable",matchIfMissing = true)
public class ConfigBootstrapConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public MbbConfigProPerties mbbConfigProPerties(){
        return  new MbbConfigProPerties();
    }


    @Bean
    public MbbPropertySourceLocator mbbPropertySourceLocator(
            MbbConfigProPerties mbbConfigProPerties) {
        return new MbbPropertySourceLocator(mbbConfigProPerties);
    }

主要是加载了下面的MbbPropertySourceLocator 这个bean 注入了nacos 的配置信息。

而MbbPropertySourceLocator 实现了PropertySourceLocator 接口,此接口是springcloud为了加载对应的配置文件信息到对应的容器中去。我们集成此接口也会把我们自己的对应的配置信息加载到对应的容器中去。

public PropertySource<?> locate(Environment environment) 重写此方法

CompositePropertySource 返回值为这个 

所以我们只需要把对应的配置信息加载进到这个类中即可。

我们有了nacos的配置信息,此时就把对应的nacos配置信息用来连接nacos。

从nacos上找到了对应的信息后,加载进去到CompositePropertySource这个类中。

nacos 中会加载两个配置文件一个是你激活的文件一个是对应的项目名称文件。至于为啥激活两个,问了nacos社区的人。。。。。他们没回复,我也不知道为啥。。。

server:
  port: 4466

spring:
  profiles:
    active: dev
  application:
    name: nacos-config-client
  mbb:
    server-addr: localhost:8848 #Nacos作为配置中心地址
    file-extension: yaml #指定yaml格式配置
    group: TEST_GROUP
    namespace: b8b51e18-7395-4124-8840-fe39fde231b1
 

假如我的配置信息长成这个样子。。。

他会加载两个配置文件>>>>一个是nacos-config-client.yaml 和 nacos-config-client-dev.yaml 

还有一个加载的类,ConfigAutoConfiguration 加载了 MyContextRefresher 

实现了两个接口 ApplicationListener<ApplicationReadyEvent>, ApplicationContextAware

ApplicationListener这个监听就是为了监听当spring容器加载完成的时候 才开始进行对应的事件监听操作。 下面的接口为了注入ApplicationContext 对象。

此方法主要为了给对应的文件添加监听。

configService.addListener(dataId, group, listener);
并在文件内容有变动的时候进行对应的发布对应的RefreshEvent事件,刷新对应的refreshscope对象
applicationContext.publishEvent(
        new RefreshEvent(this, null, "Refresh Nacos config"));

NacosConfigService 是nacos 操作核心类。原生的nacos有对应的CRUD的监听操作。我这里只模拟了对应的add方法

具体还是看代码我把代码放上去,并且给出一个demo用来使用。使用的 

这个模块 

https://gitee.com/mibaowei/my-nacos.git 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 中,可以通过 `@Value` 注解来获取 Nacos 配置中心的配置,同时也可以通过 `@NacosPropertySource` 注解来指定 Nacos 配置中心的配置源。但是,如果需要实时监听 Nacos 配置文件的变化,可以使用 Nacos 提供的监听器来实现。 具体步骤如下: 1. 在 `pom.xml` 文件中添加 Nacos 配置中心的依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` 2. 在 `application.properties` 或 `application.yml` 文件中添加 Nacos 配置中心的配置: ```yml spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.namespace=your_namespace spring.cloud.nacos.config.group=your_group spring.cloud.nacos.config.file-extension=properties spring.cloud.nacos.config.shared-dataids=demo.properties ``` 3. 创建一个配置,使用 `@NacosPropertySource` 注解指定 Nacos 配置中心的配置源: ```java @Configuration @NacosPropertySource(dataId = "demo.properties", autoRefreshed = true) public class NacosConfig { @Value("${demo.config}") private String config; @PostConstruct public void init() { System.out.println(config); } } ``` 4. 在启动上添加 `@EnableDiscoveryClient` 注解,以启用 Nacos 服务注册与发现功能。 ```java @SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 通过上述步骤,就可以实现 Spring Boot 监听 Nacos 配置文件的变化了。当 Nacos 配置中心的配置文件发生变化时,应用程序会自动更新配置,并且调用 `@Value` 注解绑定的字段也会更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值