spring-cloud-alibaba(五)Nacos-Config篇

Nacos-Config

  • 权限管理
    • 开启权限配置
    • 创建nacos-config
    • 读取配置文件内容 properties格式
    • 支持配置的动态更新
    • 支持自定义扩展的 Data Id 配置
    • @RefreshScope注解说明

权限管理

新增配置文件
spring-cloud-alibaba(五)Nacos-Config篇_第1张图片

spring-cloud-alibaba(五)Nacos-Config篇_第2张图片

开启权限配置

使用权限进行配置读写操作,需要配置application.properties
spring-cloud-alibaba(五)Nacos-Config篇_第3张图片

### If turn on auth system:
nacos.core.auth.enabled=true

创建用户
spring-cloud-alibaba(五)Nacos-Config篇_第4张图片

绑定角色
spring-cloud-alibaba(五)Nacos-Config篇_第5张图片
添加权限
spring-cloud-alibaba(五)Nacos-Config篇_第6张图片

登录新账号进行测试
没有权限访问 public
spring-cloud-alibaba(五)Nacos-Config篇_第7张图片
测试新增配置
spring-cloud-alibaba(五)Nacos-Config篇_第8张图片

创建nacos-config

nacos-config 官方文档https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
spring-cloud-alibaba(五)Nacos-Config篇_第9张图片
更改pom文件
继承 sunflower,添加nacos-config 依赖


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <parent>
        <groupId>com.ycgroupId>
        <version>0.0.1-SNAPSHOTversion>
        <artifactId>sunflowerartifactId>
    parent>
  
    <artifactId>nacos-configartifactId>
     
    <description>Demo project for Spring Bootdescription>
    <properties>
        <java.version>1.8java.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
         
    	<dependency>
           	 <groupId>com.alibaba.cloudgroupId>
          	  <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
       	 dependency>
 	   dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

父工程中添加子模块

   <modules>
        <module>ordermodule>
        <module>stockmodule>
        <module>order-nacosmodule>
        <module>stock-nacosmodule>
        <module>order-ribbonmodule>
        <module>order-openfeginmodule>
        <module>product-nacosmodule>
        <module>nacos-configmodule>
    modules>

读取配置文件内容 properties格式

官方说明
spring-cloud-alibaba(五)Nacos-Config篇_第10张图片
必须使用 bootstrap.properties 配置文件来配置Nacos Server 地址 也支持bootstrap.yml
创建 bootstrap.properties

spring.application.name=config-nacos
spring.cloud.nacos.server-addr=localhost:8848

application.yml文件 配置启动端口 8050

server:
  port: 8050

主启动类输出配置文件内容

@SpringBootApplication
public class NacosConfigApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
        String userName = applicationContext.getEnvironment().getProperty("user.name");
        String userAge = applicationContext.getEnvironment().getProperty("user.age");
        System.err.println("user name :"+userName+"; age: "+userAge);
    }

}

启动项目测试
启动项目报错 403
在这里插入图片描述
原因是因为,nacos配置了权限,所以要制指定用户名和密码

spring.application.name=config-nacos
spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos

重启项目进行测试
输出结果为 user name :wangsoft(电脑名); age: null
spring-cloud-alibaba(五)Nacos-Config篇_第11张图片
可通过 命令行进行查看电脑名 set user
spring-cloud-alibaba(五)Nacos-Config篇_第12张图片
原因分析

spring.application.name=config-nacos 名称和nacos中的配置文件名显示的不一样 需要使用nacos配置文件的名称

spring-cloud-alibaba(五)Nacos-Config篇_第13张图片
需要改为

spring.application.name=com.yc.ordernacos.redis  # 更改为配置文件的名称
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
spring.cloud.nacos.config.namespace=  namespace如果是public 命名空间可以直接省略,或者直接注释这一行  如果配置了 则输出结果还是电脑的名字

演示 spring.cloud.nacos.config.namespace= public

spring.application.name=com.yc.ordernacos.redis nacos配置文件
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
spring.cloud.nacos.config.namespace=public   命名空间

spring-cloud-alibaba(五)Nacos-Config篇_第14张图片
读取配置文件内容 yaml格式
官方文档说明
spring-cloud-alibaba(五)Nacos-Config篇_第15张图片
新建nacos-config 配置文件
spring-cloud-alibaba(五)Nacos-Config篇_第16张图片
修改bootstrap.properties 配置文件

# 配置文件地址
spring.application.name=com.yc.order.mysql

spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml

启动项目:输出结果为
spring-cloud-alibaba(五)Nacos-Config篇_第17张图片

支持配置的动态更新

主启动类更改为循环读取文件

public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
        while(true) {
            //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
            String userName = applicationContext.getEnvironment().getProperty("user.name");
            String userAge = applicationContext.getEnvironment().getProperty("user.age");
            System.err.println("user name :" + userName + "; age: " + userAge);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

测试动态更新
刚启动一直输出
在这里插入图片描述
更改配置文件
spring-cloud-alibaba(五)Nacos-Config篇_第18张图片

支持自定义扩展的 Data Id 配置

官方提供了两种配置方式

# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1

# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=true
spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,默认不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties

# 2、Data Id 不在默认的组,默认不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true

nacos新创建配置文件 com.yc.common2.yaml
spring-cloud-alibaba(五)Nacos-Config篇_第19张图片

spring-cloud-alibaba(五)Nacos-Config篇_第20张图片

# 配置文件地址服务名称
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
# 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
# 指定自定义的data-id
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.common2.yaml

启动醒目 输出结果为: user name :com.yc.common2.yaml; age: null
演示相同命名空间,不同分组
新建com.yc.common3.yaml
spring-cloud-alibaba(五)Nacos-Config篇_第21张图片

# 配置文件地址
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.common3.yaml
# 指定自定义分组
spring.cloud.nacos.config.shared-configs[0].group=COMMON_GROUP

输出结果

user name :common3.相同命名空间,不同分组 COMMON_GROUP; age: null

演示不同命名空间
新建命名空间
spring-cloud-alibaba(五)Nacos-Config篇_第22张图片
在lucky中新建配置文件
spring-cloud-alibaba(五)Nacos-Config篇_第23张图片

# 配置文件地址
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
#指定命名空间 使用MD5 并不是Data ID
spring.cloud.nacos.config.namespace=009e25c9-0169-4885-bb86-801200a9bd5a
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.lucky.yaml

输出结果为 user name :com.yc.lucky.yaml lucky命名空间; age: null

两种方式说明

第一种
spring.cloud.nacos.config.extension-configs[0].data-id=common.yaml
第二种
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml
两种方式使用方法一样,不同的是 优先级不同
shared-configs[n]  >  extension-configs[n]  

@RefreshScope注解说明

使用 @Value(“${user.name}”) 注解获取配置文件值的时候不会动态刷新
,配合使用 @RefreshScope注解
**添加ConfigController **

@RestController
@RequestMapping("/config")
public class ConfigController {

    @Value("${user.name}")
    private  String name; 使用
    @RequestMapping("/getValues")
    public String getValues(){
        return  name;
    }
}

访问http://localhost:8050/config/getValues

结果
spring-cloud-alibaba(五)Nacos-Config篇_第24张图片

更新配置文件
spring-cloud-alibaba(五)Nacos-Config篇_第25张图片
访问不会发生变化
spring-cloud-alibaba(五)Nacos-Config篇_第26张图片
更改ConfigController

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${user.name}")
    private  String name;
    @RequestMapping("/getValues")
    public String getValues(){
        return  name;
    }
}

更改bootstrap.properties

# 配置文件地址
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
#指定命名空间 使用MD5 并不是Data ID
spring.cloud.nacos.config.namespace=009e25c9-0169-4885-bb86-801200a9bd5a
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.lucky.yaml
# 开启动态刷新, 默认不支持动态刷新
spring.cloud.nacos.config.shared-configs[0].refresh=true

访问结果OK
spring-cloud-alibaba(六)Sentinel 篇

你可能感兴趣的:(spring-cloud,springcloud)