Nacos 配置管理-应用于分布式系统

news2024/11/17 10:39:42

**

Nacos 配置管理-应用于分布式系统

**
目录:

一、Nacos 配置管理-应用于分布式系统-微服务创建

1.1 发布配置 ( nacos-1.1.3 )

1.2 打开 idea 创建一个父 Maven 工程 nacos_config 工程,和两个子模块(service1, service2 )。

1.3 在 父工程的 pom.xml 配置文件中导入依赖

1.4 新增 service1, service2 子工程(子模块)

1.5 在子工程 service1, service2 的 pom.xml 文件中加入依赖

1.6 创建 service1, service2 子工程的配置文件 bootstrap.yml

1.7 创建 springboot 启动类 Service1BootStrap.java, Service2BootStrap.java

1.8 分别启动两个测试类的运行 main() 方法

二、Nacos 配置管理-应用于分布式系统-微服务读取配置

2.1 修改 service1 子模块的启动类 Service1BootStrap.java 动态获取配置信息。

2.2 启动 nacos 服务( /bin/startup.cmd ) 浏览器访问:http://127.0.0.1:8848/nacos

2.3 同样,修改 service2 子模块的启动类 Service2BootStrap.java

2.4 启动 nacos 服务( /bin/startup.cmd )

三、Nacos 配置管理-应用于分布式系统-自定义扩展Data ID

3.1 打开 nacos 控制台,并点击菜单 配置管理 --> 配置列表 --> dev

3.2 修改 bootstrap.yml 配置文件,添加扩展 DataId 配置

3.3 修改 Service1BootStrap.java 启动类,添加 动态获取配置方法 getConfig2()

3.4 浏览器地址栏输入:http://localhost:56010/configs2

四、Nacos 配置管理-应用于分布式系统-配置优先级

4.1 登录 http://127.0.0.1:8848/nacos 修改配置,添加 age 内容,测试 DataId 优先级。

4.2 修改 bootstrap.yml 配置文件,添加注释

4.3 启动 nacos 服务 (运行启动类 )

4.4 浏览器地址栏输入:http://localhost:56010/configs2 测试查看优先级

一、Nacos 配置管理-应用于分布式系统-微服务创建

1.1 发布配置 ( nacos-1.1.3 )

首先在 nacos 发布配置,规划两个服务 service1, service2,
并且对这两个服务的配置进行集中维护。

启动 nacos 服务(  /bin/startup.cmd  )
浏览器访问:http://127.0.0.1:8848/nacos 

1)打开控制台,先创建 3 个命名空间 namespace 
命名空间 namespace 
--> 新建命名空间 namespace 
--> 命名空间名: dev
	描述:开发环境
--> 确定。

命名空间 namespace 
--> 新建命名空间 namespace 
--> 命名空间名: pro
	描述:生产环境
--> 确定。

命名空间 namespace 
--> 新建命名空间 namespace 
--> 命名空间名: test
	描述:测试环境
--> 确定。

在这里插入图片描述

在这里插入图片描述

2)打开 nacos 控制台,并点击菜单 配置管理 --> 配置列表 --> dev :
添加如下配置:	service1

namespace 	: dev  
Data ID		: service1.yaml
Group		: TEST_GROUP  
配置模式	:YAML
配置内容	:common:
				name: service1 config--dev 开发环境
				
(注意:配置内容,遵循 yaml 文件格式,
: 后要有空格,缩进不能用 Tab键 缩进,两个空格缩进就行 )
				
namespace 	: pro #生产环境 
Data ID		: service2.yaml
Group		: TEST_GROUP  #测试组
配置模式	:YAML
配置内容	:common:
				name: service2 config--pro 生产环境

在这里插入图片描述

在这里插入图片描述

1.2 打开 idea 创建一个父 Maven 工程 nacos_config 工程,

和两个子模块( service1, service2  )。

--> idea 
--> File 
--> New Project 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( nacos_config )
	Version : 1.0-SNAPSHOT
--> Next 
--> Project name: ( nacos_config )
	Project location: ( C:\java-test\idea2019\nacos_config )
--> Finish

(父工程不编写代码,可以删除 src 目录)

1.3 在 父工程的 pom.xml 配置文件中导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>djh.it</groupId>
    <artifactId>nacos_config</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

</project>

<!-- C:\java-test\idea2019\nacos_config\pom.xml -->	

1.4 新增 service1, service2 子工程(子模块),

创建两个子模块:

--> 右键 nacos_config 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service1 )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service1 )
	Content root : (  C:\java-test\idea2019\nacos_config\service1 )
	Module file location: (  C:\java-test\idea2019\nacos_config\service1 )
--> Finish

--> 右键 nacos_config 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service1 )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service1 )
	Content root : ( C:\java-test\idea2019\nacos_config\service2 )
	Module file location: ( C:\java-test\idea2019\nacos_config\service2 )
--> Finish

1.5 在子工程 service1, service2 的 pom.xml 文件中加入依赖:

	<?xml version="1.0" encoding="UTF-8"?>
	<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	    <parent>
	        <artifactId>nacos_config</artifactId>
	        <groupId>djh.it</groupId>
	        <version>1.0-SNAPSHOT</version>
	    </parent>
	    <modelVersion>4.0.0</modelVersion>
	
	    <artifactId>service1</artifactId>
	
	    <dependencies>
	        <dependency>
	            <groupId>com.alibaba.cloud</groupId>
	            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	        </dependency>
	        <dependency>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-starter-web</artifactId>
	        </dependency>
	    </dependencies>
	
		</project>
		
		<!-- C:\java-test\idea2019\nacos_config\service1\pom.xml -->
		<?xml version="1.0" encoding="UTF-8"?>
		<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
		    <parent>
		        <artifactId>nacos_config</artifactId>
		        <groupId>djh.it</groupId>
		        <version>1.0-SNAPSHOT</version>
		    </parent>
		    <modelVersion>4.0.0</modelVersion>
		
		    <artifactId>service2</artifactId>
		
		    <dependencies>
		        <dependency>
		            <groupId>com.alibaba.cloud</groupId>
		            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
		        </dependency>
		        <dependency>
		            <groupId>org.springframework.boot</groupId>
		            <artifactId>spring-boot-starter-web</artifactId>
		        </dependency>
		    </dependencies>
		
		</project>
		
		<!-- C:\java-test\idea2019\nacos_config\service2\pom.xml -->

1.6 创建 service1, service2 子工程的配置文件 bootstrap.yml

##  C:\java-test\idea2019\nacos_config\service1\src\main\resources\bootstrap.yml

server:
  port: 56010  #启动端口 命令行注入

spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848  #配置中心地址
        file-extension: yaml  #dataid 的名称是 application 的 name 加 file-extension 名称 :service1.yaml
        namespace: eae273b2-9298-4b99-b4aa-a3d5ea5df089  #开发环境
        group: TEST_GROUP  #测试组
	

##  C:\java-test\idea2019\nacos_config\service2\src\main\resources\bootstrap.yml

server:
  port: 56020  #启动端口 命令行注入

spring:
  application:
    name: service2
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848  #配置中心地址
        file-extension: yaml  #dataid 的名称是 application 的 name 加 file-extension 名称 :service2.yaml
        namespace:2ee539a7-ad76-4213-a90f-30fa1cc57c70  # pro 生产环境  ( nacos-1.1.3 )
        group: TEST_GROUP  #测试组
	

1.7 创建 springboot 启动类 Service1BootStrap.java, Service2BootStrap.java

/**
 *  C:\java-test\idea2019\nacos_config\service1\src\main\java\djh\it\nacos\service1\Service1BootStrap.java
 *
 *  2024-3-21 springboot 启动类 *
 */

package djh.it.nacos.service1;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Service1BootStrap {

    public static void main(String[] args) {
        SpringApplication.run(Service1BootStrap.class, args);
    }


    //通过 @Value 注解读取配置信息
    @Value("${common.name}")
    private String config1;

    @GetMapping("/configs")
    public String getConfigs(){
        //读取配置信息
        return config1;
    }

    //访问地址:浏览器地址栏输入:http://localhost:56010/configs  // 输出:service1 config--dev 开发环境
}

	
/**
 *  C:\java-test\idea2019\nacos_config\service2\src\main\java\djh\it\nacos\service2\Service2BootStrap.java
 *
 *  2024-3-21 springboot 启动类 *
 */

package djh.it.nacos.service2;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Service2BootStrap {

    public static void main(String[] args) {
        SpringApplication.run(Service2BootStrap.class, args);
    }

    //通过 @Value 注解读取配置信息
    @Value("${common.name}")
    private String config2;

    @GetMapping("/configs")
    public String getConfigs(){
        //读取配置信息
        return config2;
    }

    //访问地址:浏览器地址栏输入:http://localhost:56020/configs   // 输出:service2 config--pro 生产环境
}


1.8 分别启动两个测试类的运行 main() 方法,

浏览器地址栏输入:http://localhost:56010/configs
输出:service1 config–dev 开发环境

浏览器地址栏输入:http://localhost:56020/configs
输出:service2 config–pro 生产环境

在这里插入图片描述

在这里插入图片描述


二、Nacos 配置管理-应用于分布式系统-微服务读取配置

2.1   修改 service1 子模块的启动类 Service1BootStrap.java 
	动态获取配置信息。
<a name="anchor02-1"></a>

/**
 *  C:\java-test\idea2019\nacos_config\service1\src\main\java\djh\it\nacos\service1\Service1BootStrap.java
 *
 *  2024-3-21 springboot 启动类 *
 */

package djh.it.nacos.service1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Service1BootStrap {

    public static void main(String[] args) {
        SpringApplication.run(Service1BootStrap.class, args);
    }

    // 注入配置文件上下文
    @Autowired
    private ConfigurableApplicationContext applicationContext;

    //通过 @Value 注解读取配置信息
    @Value("${common.name}")
    private String config1;

    @GetMapping("/configs")
    public String getConfigs(){
        //读取配置信息
//        return config1;

        //动态获取配置信息
        return applicationContext.getEnvironment().getProperty("common.name");
    }

    //访问地址:浏览器地址栏输入:http://localhost:56010/configs  // 输出:service1 config
    //访问地址:浏览器地址栏输入:http://localhost:56010/configs  // 输出:service1 config 111111
}
		
2.2  启动 nacos 服务(  /bin/startup.cmd  )	浏览器访问:http://127.0.0.1:8848/nacos 

打开 nacos 控制台,并点击菜单 配置管理 --> 配置列表 --> dev 
把 service1.yaml 进行【编辑】,内容改变两次
浏览器访问:http://localhost:56010/configs  查看获取参数变化。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.3 同样,修改 service2 子模块的启动类 Service2BootStrap.java

/**
 *  C:\java-test\idea2019\nacos_config\service2\src\main\java\djh\it\nacos\service2\Service2BootStrap.java
 *
 *  2024-3-21 springboot 启动类 *
 */

package djh.it.nacos.service2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Service2BootStrap {

    public static void main(String[] args) {
        SpringApplication.run(Service2BootStrap.class, args);
    }

    // 注入配置文件上下文
    @Autowired
    ConfigurableApplicationContext applicationContext;

    //通过 @Value 注解读取配置信息
    @Value("${common.name}")
    private String config2;

    @GetMapping("/configs")
    public String getConfigs(){
//        //读取配置信息
//        return config2;

       //动态获取配置信息
       return applicationContext.getEnvironment().getProperty("common.name");
    }

    //访问地址:浏览器地址栏输入:http://localhost:56020/configs   // 输出:service2 config
    //访问地址:浏览器地址栏输入:http://localhost:56020/configs   // 输出:service2 config 22
}

2.4  启动 nacos 服务(  /bin/startup.cmd  )	浏览器访问:http://127.0.0.1:8848/nacos 

打开 nacos 控制台,并点击菜单 配置管理 --> 配置列表 --> pro 
把 service2.yaml 进行【编辑】,内容改变两次
浏览器访问:http://localhost:56020/configs  查看获取参数变化。	

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


三、Nacos 配置管理-应用于分布式系统-自定义扩展 dataid

3.1  打开 nacos 控制台,并点击菜单 配置管理 --> 配置列表 --> dev :
添加如下自定义扩展 Data ID 配置:	

		namespace 	: dev  
		Data ID		: ext-config-common01.properties
		Group		: DEFAULT_GROUP  
		配置模式	:Properties
		配置内容	:common.age=18
					  common.address=beijing
						
		namespace 	: dev  
		Data ID		: ext-config-common02.properties
		Group		: GLOBALE_GROUP  
		配置模式	:Properties
		配置内容	:common.birthday=1990-8-8	
	
		namespace 	: dev  
		Data ID		: ext-config-common03.properties
		Group		: REFRESH_GROUP  
		配置模式	:Properties
		配置内容	:common.fullname=段子手168

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.2   修改 bootstrap.yml 配置文件,添加扩展 DataId 配置

##  C:\java-test\idea2019\nacos_config\service1\src\main\resources\bootstrap.yml

server:
  port: 56010  #启动端口 命令行注入

spring:
  application:
    name: service1  #spring应用名
  cloud:
    nacos:  # nacos作为注册中心的配置项,对应nacosDiscoveryProperties配置类
      config:
        server-addr: 127.0.0.1:8848  # nacos服务器地址
        file-extension: yaml  #dataid 的名称是 application 的 name 加 file-extension 名称 :service1.yaml        
        namespace: b75c342f-8aeb-4f5a-a1d3-21f0738d7960  # dev开发环境(nacos-1.1.3)
        group: TEST_GROUP  # 测试组
        
        # 扩展的 DataId 配置 
        # 1.Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新: common.age=18  common.address=beijing 
        ext-config[0]:
          data-id: ext-config-common01.properties
        # 2.Data Id 不在默认的组,不支持动态刷新:  common.birthday=1990-8-8 
        ext-config[1]:
          data-id: ext-config-common02.properties
          group: GLOBALE_GROUP  # 全局组
        # 3.Data Id 既不在默认的组,也支持动态刷新: common.fullname=段子手168
        ext-config[2]:
          data-id: ext-config-common03.properties
          group: REFRESH_GROUP  # 发布组
          refresh: true  # 动态刷新
        # 自定义共享 DataId 配置,只支持 DEFAULT_GROUP 分组
#        shared-dataids: ext-config-common01.properties, ext-config-common03.properties, ext-config-common03.properties
#        refreshable: ext-config-common01.properties

3.3   修改 Service1BootStrap.java 启动类,添加 动态获取配置方法 getConfig2()

/**
 *  C:\java-test\idea2019\nacos_config\service1\src\main\java\djh\it\nacos\service1\Service1BootStrap.java
 *
 *  2024-3-21 springboot 启动类 *
 */

package djh.it.nacos.service1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Service1BootStrap {

    public static void main(String[] args) {
        SpringApplication.run(Service1BootStrap.class, args);
    }

    // 注入配置文件上下文
    @Autowired
    private ConfigurableApplicationContext applicationContext;

    //通过 @Value 注解读取配置信息
    @Value("${common.name}")
    private String config1;

    @GetMapping("/configs")
    public String getConfigs(){
        //读取配置信息
//        return config1;

        //动态获取配置信息
        return applicationContext.getEnvironment().getProperty("common.name");
    }

    //访问地址:浏览器地址栏输入:http://localhost:56010/configs  // 输出:service1 config
    //访问地址:浏览器地址栏输入:http://localhost:56010/configs  // 输出:service1 config 111111

    @GetMapping(value = "/configs2")
    public String getConfigs2(){
        //读取配置信息
        String name = applicationContext.getEnvironment().getProperty("common.name");
        String age = applicationContext.getEnvironment().getProperty("common.age");
        String address = applicationContext.getEnvironment().getProperty("common.address");
        String birthday = applicationContext.getEnvironment().getProperty("common.birthday");
        String fullname = applicationContext.getEnvironment().getProperty("common.fullname");

        //动态获取配置信息
        return name+"+"+age+"+"+address+"+"+birthday+"+"+fullname;
//        return age+"+"+address+"+"+birthday+"+"+fullname;

        //访问地址:浏览器地址栏输入:http://localhost:56010/configs2  // 输出:service1 config+18+beijing+1990-8-8+段子手168

        //如果是自定义共享 DataId 配置,只支持 DEFAULT_GROUP 分组
        //访问地址:浏览器地址栏输入:http://localhost:56010/configs2  // 其他分组会输出 null 值,输出:service1 config+18+beijing+null+null
    }

}

3.4 浏览器地址栏输入:http://localhost:56010/configs2

// 输出:service1 config+18+beijing+1990-8-8+段子手168

在这里插入图片描述


四、Nacos 配置管理-应用于分布式系统-配置优先级

4.1 登录 http://127.0.0.1:8848/nacos 修改配置,添加 age 内容,测试 DataId 优先级。
<a name="anchor04-1"></a>
	ext-config-common01.properties 
	common.age=18
	common.address=beijing
	
	ext-config-common03.properties	
	common.fullname=djh
	common.age=20
	
	service1.yaml	
	common:
		name: service1 config
		age: 30
4.2 修改 bootstrap.yml 配置文件,添加注释
<a name="anchor04-2"></a>
##  C:\java-test\idea2019\nacos_config\service1\src\main\resources\bootstrap.yml

## bootstrap.yml 配置文件加载顺序优先于 application.yml 配置文件。
server:
  port: 56010  #启动端口 命令行注入

spring:
  application:
    name: service1  #spring应用名
  cloud:
    nacos:  # nacos作为注册中心的配置项,对应nacosDiscoveryProperties配置类
      config:
#        enabled: false  # 关闭配置
        # 1) 通过 application 的 name 加 file-extension 后缀名称 :service1.yaml 配置的 DataId 优先级最高。
        # server-addr: 127.0.0.1:8849, 127.0.0.1:8850, 127.0.0.1:8851  #配置中心地址
        server-addr: 127.0.0.1:8848  # nacos服务器地址
        file-extension: yaml  #dataid 的名称是 application 的 name 加 file-extension 名称 :service1.yaml
        # namespace: c3f73970-2910-4fef-b014-75b37971ed26  #开发环境(nacos-2.2.2, error)
        namespace: b75c342f-8aeb-4f5a-a1d3-21f0738d7960  # dev开发环境(nacos-1.1.3)
        group: TEST_GROUP  #测试组
        # 2)扩展的 DataId 配置 优先级次之。config external configuration
        # 1.Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新: common.age=18  common.address=beijing # 优先级低于 ext-config[1]  ext-config[2]
        ext-config[0]:
          data-id: ext-config-common01.properties
        # 2.Data Id 不在默认的组,不支持动态刷新:  common.birthday=1990-8-8 # 优先级高于 ext-config[0]
        ext-config[1]:
          data-id: ext-config-common02.properties
          group: GLOBALE_GROUP  #全局组
        # 3.Data Id 既不在默认的组,也支持动态刷新: common.fullname=djh # 优先级高于 ext-config[0] 和 ext-config[1]
        ext-config[2]:
          data-id: ext-config-common03.properties
          group: REFRESH_GROUP  #发布组
          refresh: true  #动态刷新
        # 3)自定义共享 DataId 配置,只支持 DEFAULT_GROUP 分组,优先级最低。
#        shared-dataids: ext-config-common01.properties, ext-config-common03.properties, ext-config-common03.properties
#        refreshable: ext-config-common01.properties

4.3 启动 nacos 服务 (运行启动类 )
<a name="anchor04-3"></a>
/**
 *  C:\java-test\idea2019\nacos_config\service1\src\main\java\djh\it\nacos\service1\Service1BootStrap.java
 *
 *  2024-3-21 springboot 启动类 *
 */

package djh.it.nacos.service1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Service1BootStrap {

    public static void main(String[] args) {
        SpringApplication.run(Service1BootStrap.class, args);
    }

    // 注入配置文件上下文
    @Autowired
    private ConfigurableApplicationContext applicationContext;

    //通过 @Value 注解读取配置信息
    @Value("${common.name}")
    private String config1;

    @GetMapping("/configs")
    public String getConfigs(){
        //读取配置信息
//        return config1;

        //动态获取配置信息
        return applicationContext.getEnvironment().getProperty("common.name");
    }

    //访问地址:浏览器地址栏输入:http://localhost:56010/configs  // 输出:service1 config
    //访问地址:浏览器地址栏输入:http://localhost:56010/configs  // 输出:service1 config 111111

    @GetMapping(value = "/configs2")
    public String getConfigs2(){
        //读取配置信息
        String name = applicationContext.getEnvironment().getProperty("common.name");
        String age = applicationContext.getEnvironment().getProperty("common.age");
        String address = applicationContext.getEnvironment().getProperty("common.address");
        String birthday = applicationContext.getEnvironment().getProperty("common.birthday");
        String fullname = applicationContext.getEnvironment().getProperty("common.fullname");

        //动态获取配置信息
        return name+"+"+age+"+"+address+"+"+birthday+"+"+fullname;
//        return age+"+"+address+"+"+birthday+"+"+fullname;

        //访问地址:浏览器地址栏输入:http://localhost:56010/configs2  // 输出:service1 config+18+beijing+1990-8-8+djh

        //如果是自定义共享 DataId 配置,只支持 DEFAULT_GROUP 分组
        //访问地址:浏览器地址栏输入:http://localhost:56010/configs2  // 其他分组会输出 null 值,输出:service1 config+18+beijing+null+null
    }

}


	
	4.4 浏览器地址栏输入:http://localhost:56010/configs2 
	<a name="anchor04-4"></a>
	
	//优先级最低 ext-config-common01.properties 中的 age = 18
	
	//次之输出 ext-config-common03.properties 中 age = 20
	service1 config+20+beijing+1990-8-8+djh
	
	//优先输出 service1.yaml 中 age = 30
	service1 config+30+beijing+1990-8-8+djh

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/18c9a79615b94a4c9ee8d655d0ec05c1.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3d5f4c20831e4f09965801bb33b1d435.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/351caa5c012548659cc1b421e6f7123b.png)


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/853504811a92420d84c559000bf8b97e.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1548500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL使用教程:数据库、表操作

目录 1. 免密码登录MySQL1.1 免密码配置1.2 登录选项介绍 2. MySQL基础配置&#xff1a;my.cnf3. 开机自启动设置&#xff08;可选设置&#xff09;4. 查看存储引擎5. 查看系统的编码规则和校验规则6. 数据库的操作6.1 查看数据库6.2 创建数据库 create database6.3 删除数据库…

基于matlab仿真A*算法的多目标路径规划问题

资源文件换一下 剩下的看注释即可 很详细的哦 % 定义地图大小 十行十列 ROWS 10; COLS 10;% % 初始化地图 % grid zeros(ROWS, COLS); % % 设置固定位置的障碍物 % obstacle_positions [2, 3; 4, 5; 6, 7;]; % 障碍物位置坐标 % % 将障碍物位置设置为1 % for i 1:size(o…

数据库备份工具(实现数据定时覆盖)

数据库备份工具&#xff08;实现数据定时覆盖&#xff09; 永远热爱&#xff0c;永远执着&#xff01; 工具介绍 自动化测试数据库更新调度程序 这段 Python 脚本自动化了每天定时从生产数据库更新测试数据库的过程。它利用了 schedule 库来安排并执行每天指定时间的更新任务…

【网络安全技术】——Kali Linux环境部署

&#x1f4d6; 前言&#xff1a;Kali 是一个基于 Debian 的 Linux 发行版。它的目标就是为了简单&#xff1a;在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这个目标。大多数做安全测试的开源工具都被囊括在内。 目录 &#x1f552; 1. Kali Linux下载与安装…

latex在写算法`\For` 和 `\EndFor` 以及 `FOR` 和 `\ENDFOR` ,报错Undefined control sequence.

这里写目录标题 1. 错误原因2. 进行改正3. 爱思唯尔期刊与施普林格期刊对于算法的格式不太一样&#xff0c;不能直接套用总结 1. 错误原因 我在算法中使用\For&#xff0c;\EndFor 2. 进行改正 换成FOR&#xff0c;\ENDFOR 3. 爱思唯尔期刊与施普林格期刊对于算法的格式不太…

构建以太网交换网络——(生成树实验)

实验介绍 关于本实验 以太网交换网络中为了进行链路备份&#xff0c;提高网络可靠性&#xff0c;通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路&#xff0c;引发广播风暴以及MAC地址表不稳定等故障现象&#xff0c;从而导致用户通信质量较差&#xff0c;甚至…

图论06-飞地的数量(Java)

6.飞地的数量 题目描述 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 grid 的边界。 返回网格中 无法…

后端基础篇- 社区 IDEA 手动 Maven 创建 SpringBoot 项目、Maven 安装与配置环境变量、IDEA 集成 Maven

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Maven 安装与配置环境变量 1.1 下载并解压安装包 1.2 配置本地仓库 1.3 配置阿里云私服 1.4 配置环境变量 2.0 IDEA 集成 Maven 2.1 首先创建一个新项目 2.2 开始…

javaWeb医院在线挂号系统

功能描述 医院挂号系统主要用于实现医院的挂号&#xff0c;前台基本功能包括&#xff1a;用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括&#xff1a;系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如下&…

舵机烧录

舵机烧录 一、硬件连接1、准备物资2、连接&#xff08;1&#xff09;舵机线一侧连接舵机控制板&#xff0c;另一侧连接舵机&#xff08;2&#xff09;老安卓线一侧连接舵机控制板&#xff0c;一侧连接电脑&#xff08;3&#xff09;接上低压电池 二、软件使用1、打开舵机烧录软…

抖音小店月入三五万?真有这么赚钱吗?

大家好&#xff0c;我是电商糖果 在网上我们经常看到这样的帖子&#xff0c;或者视频博主说他自己在抖音开小店做副业。 收入比主业还高&#xff0c;一个月好几万。 很多人都说骗人的&#xff0c;要是赚钱这么容易&#xff0c;我不早成富一代了。 糖果是做电商的&#xff0…

electron 打包生成的latest.yml文件名字变成xxx.yml文件名

正常情况是electron每次打包会生成一个latest.yml文件和一个xxx.exe文件&#xff0c;但是当version的名字修改成 这样 后面添加了-beta &#xff0c;然后生成的文件名字就变成了 beta.yml 更改方法&#xff1a; 在build配置底下添加 "detectUpdateChannel": false…

产品经理方法论——MRD文档模板】

一、 文档格式 无要求 二、文档类型 PPT 三、文档框架 1. 市场说明 市场规模&#xff1a;市场规模决定最终的利润。我们对于直接产生现金流的产品通过交易额衡量市场规模&#xff0c;如果是间接产生现金流的产品我们通过用户量衡量市场规模。市场增速&#xff1a;随着时间…

独享IP可以避免被封禁或限制访问的风险

在一些网站或服务中&#xff0c;存在对共享IP的封禁或限制访问的情况&#xff0c;这给用户带来了不便。而使用独享IP可以有效规避这一问题&#xff0c;保障用户正常访问需求。例如&#xff0c;在进行搜索引擎优化、社交媒体营销或广告投放时&#xff0c;独享IP可以确保用户的网…

spring-boot-starter-validation

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 编写程序Controller接口时,对于参数的验证非常重要,但是多个参数时,如…

刷题之贪心3

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这篇文章将给大家介绍贪心算法和贪心算法题目的练习和解析&#xff0c;贪心算法的本质就是每一个阶段都是局部最优&#xff0c;从而实现全局最优。加上这篇文章一共有30道贪心题目了&#xff0c;加油! 坏了的计算器 题目分析…

改造 cl_demo_output=>display支持第一行字段名显示成字段描述

1.背景: 标准的cl_demo_output=>display显示的内表第一行为字段名,不方便用户查看,故需要将第一行换成字段描述 2.方法: 2.1 建立FIELDCAT字段结构 定义包含字段名和字段描述的结构和行类型 2.2 建立类,编写相关代码 代码如下: DATA type TYPE c LENGTH 1. DAT…

怎么创建百科人物的词条?百度百科词条创建

百度百科中&#xff0c;创建一个属于自己的词条&#xff0c;不仅是个人荣誉的象征&#xff0c;更是对其生平事迹的官方记录&#xff0c;能够让更多人了解和记住一个人的成就。那么&#xff0c;如何创建一个高质量的百科人物词条呢&#xff1f;本文伯乐网络传媒将详细解答这一问…

007_how_to_start_learning_Matlab学习的启动与加速

Matlab学习的启动与加速 1. 前言 这个专题的Matlab博文系列&#xff0c;来到了传奇的007&#xff0c;我又准备放下技术工作的写作&#xff0c;来一点务虚和规划的内容。 这个系列的开始&#xff0c;也是一个随机发生的小概率事件&#xff0c;本来Python&#xff08;PyQt&…

【MySQL】多版本并发控制

一、什么是MVCC MVCC是通过数据行的多个版本管理来实现数据库的并发控制。MVCC也就相当于是如何实现在相应的隔离级别下&#xff0c;更好的实现并发。 二、快照读与当前写 MVCC在InnoDB中的实现主要是为了提高数据库并发性能&#xff0c;用更好的方式去处理读-写冲突。 2.1、…