NACOS保姆笔记(3)——Spring Cloud Alibaba Nacos配置中心

6 篇文章 0 订阅
3 篇文章 0 订阅

前面我们介绍过:

NACOS保姆笔记(1)——NACOS的安装和启动
NACOS保姆笔记(2)——Spring Cloud Alibaba Nacos服务注册与发现

本篇主要介绍下Nacos和spring cloud alibaba来组合实现配置中心

Nacos端

三个参数

在开始新建一个配置文件之前,我们先要了解在Nacos配置中心中,命名空间(Namespace)、DataID和Group,类似于Java中的包名、类名和文件名。

  • Namespace:用于区分不同的部署环境或租户,是最高层级的隔离。

一般用作开发环境的归类,比如开发环境dev,测试环境test,生产环境prod等。它是Nacos鉴权的分割维度。也就是不同Namespace采用不同的鉴权账号

  • DataID:是配置集的唯一标识,用于精确定位到具体的配置集。

一般用作应用归类。通常是由${prefix}-${spring.profile.active}.${file-extension}组成的。

其中:

  • ${prefix}默认为spring.application.name的值,
  • ${spring.profile.active}为当前环境对应的profile,
  • ${file-extension}为配置内容的数据格式。

另外,DataID与应用程序的spring.application.name同名比较好,因为nacos链接时会默认以应用name去找DataID。

  • Group:用于对配置集进行分组,以区分同一Namespace下DataID相同的配置集。

Group提供了更细粒度的配置集分组管理功能。也就是同一个Group下可以多个DataID

在实际应用中,可以根据具体需求和场景灵活选择和使用这些配置选项来实现高效、灵活的配置管理。

新建配置

有了以上3个参数的理解,我们快速开始新建一个配置吧。

按顺序先在“菜单-命名空间”里新建一个Namespace叫:demo-v2-dev;

再到“菜单-配置管理-配置列表-创建配置”。此时填写DataID为应用程序名字demo或demo.properties,然后Goup写demo_v2_group。至于MD5不要填。

配置内容呢,就和我们平时的application.properties文件一样写,比如:

spring.datasource.url=jdbc:mysql://localhost:3306/yourdb?useSSL=false&serverTimezone=UTC  
spring.datasource.username=root  
spring.datasource.password=yourpassword  
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#随便自定义一些参数
user=admin
password=pw

保存之后,一个新的配置文件就在nacos端等待被使用了。

应用端

应用端我们用了Spring Cloud Alibaba,如果不考虑服务与发现的话,我们就只管Nacos配置中心部分,则只需要在pom增加config即可:

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
</dependency>

然后最重要的是properties文件里:

# 应用服务 WEB 访问端口
server.port=8080
spring.application.name=helloworld
# nacos配置
spring.cloud.nacos.config.server-addr=ip:8848
#namespace
spring.cloud.nacos.config.namespace=0678d38c-e0f7-49aa-a07b-2f041ec
#dataID
spring.config.import=nacos:${spring.application.name}?refresh=true
#group
spring.cloud.nacos.config.group=group_hello
#username&password,要对该namespace有读权限
spring.cloud.nacos.config.username=dev-user
spring.cloud.nacos.config.password=dev-user

到此,其实就可以严重是否成功了。编译时,会发现编译信息里提示连接nacos成功,且精准关联到相应的DataID和Group了。

有些情况下编译会报错:

***************************

Description:

No spring.config.import property has been defined

Action:

Add a spring.config.import=nacos: property to your configuration.
If configuration is not required add spring.config.import=optional:nacos: instead.
To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.

这种情况就不要犟,跟着提示走,把spring.config.import加进去就行。

也看一下java部分的代码吧

若选择用Controller做实验,则参考如下:

@RestController
@RefreshScope
public class TestController {
    @Value("${user}")
    private String user;
    @Value("${password}")
    private String password;

    @GetMapping("/hello")
    public String getUser() {
        return user+"---"+password;
    }
}

这里要注意下@RefreshScope的注解,他可以让实时更新Nacos端的参数信息。就是程序启动后,Nacos的配置参数变化了,那么用了它之后,也能及时更新到新参数。

若选用实体类做实验,则参考如下:

@Component
public class ConfigClient {
    @Value("${user}")
    private String user;

    @Value("${password}")
    private String password;

    @PostConstruct
    public void printConfigAtStartup() {
        printConfig();
    }

    public void printConfig() {
        System.out.println("Database Username: " + user);
        System.out.println("Database Password: " + password);
    }
}

这里要注意下@PostConstruct的注解,它用于执行一些启动时的初始化工作,比如资源的加载、配置的读取和验证等。 

实际上,Config类也是要被多个其他类调用的,不会向上面postconstruct一样理论化使用场景。这里我们可以用Environment:

@Component
@RefreshScope
public class NacosConfig {
    private static Environment environment;
    @Autowired
    public NacosConfig(Environment environment) {
        NacosConfig.environment = environment;
    }
    public static String getUserName() {
        return environment.getProperty("username");
    }    
}

需要调用的时候呢,直接在其他类里String userName = NacosConfig.getUserName()就可以了

如果不要静态的呢,稍微改动下:

@Component
@RefreshScope
public class NacosConfig {
    private final Environment environment;
    @Autowired
    public NacosConfig(Environment environment) {
        this.environment = environment;
    }
    public String getUserName() {
        return environment.getProperty("userName");
    }
}

 然后其他类调用的时候,加上@Autowired注解

 @Autowired
 NacosConfig  config;

    @Value("${userName}")
    public String userName;

    @GetMapping("/hello")
    public String getUser() {       
        return userName+"----"+NacosConfig.getUserName();
    }

 return的前后两种都一样,都具备自动刷新nacos配置值的效果,也就是nacos配置参数的热更新。

至于JDBC等一些参数,就不用特殊获取了,就当本地配置参数一样用。

好了,本期笔记先到这。下一期我们讲一下:

NACOS保姆笔记(4)——Spring Cloud Alibaba Nacos鉴权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laolitou_1024

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值