SpringBoot使用Nacos进行application.yml配置管理

 更新时间:2024年12月13日 10:45:06   作者:水w  
Nacos是阿里巴巴开源的一个微服务配置管理和服务发现的解决方案,它提供了动态服务发现、配置管理和 服务管理平台,Nacos使用Raft协议保证配置的一致性,同时支持多种配置 格式,如properties、yaml等,本文介绍了SpringBoot使用Nacos进行application.yml配置管理

引言

Nacos是阿里巴巴开源的一个微服务配置管理和服务发现的解决方案。它提供了动态服务发现、配置管理和 服务管理平台。Nacos的核心功能包括服务发现、配置管理和动态服务管理,使得微服务架构下的服务治理 变得简单高效。

Nacos的设计基于服务注册与发现、配置管理、动态服务管理等核心功能,通过简单的API和配置,实现了服 务的注册与发现、配置的集中管理和动态更新。Nacos使用Raft协议保证配置的一致性,同时支持多种配置 格式,如properties、yaml等。

一、准备

首先需要在本地电脑上进行Nacos服务部署,默认端口是8848,部署成功之后,就可以去浏览器输入localhost:8848进入nacos管理平台。

二、nacos管理application.yml配置

1.nacos上新建命令空间和新建配置

首先,新建命名空间(如已存在则忽略),注意:命名空间ID可不填,不填则自动生成:

然后,进到nacos的管理页面,在Nacos控制台的左侧导航栏进入配置列表,转到“配置管理”页面,点击“+”来添加一个新的配置。

  • Data ID:统一按照这个格式来: 服务名 - 环境 . 后缀名。主要是因为后面要导入的bootstrap.yaml Spring默认的读取格式就是这样的。 
  • Group:分组可以自定义,没有需求可以选择默认分组DEFAULT_GROUP。
  • 命名空间:设置的命名空间ID。
  • 配置格式:yaml。

在配置内容区域,输入你想要暴露给Spring Boot应用的配置信息。可以从SpringBoot获取yml配置信息,将需要配置到config的信息复制配置到配置内容中。

至此,nacos侧配置项已完成,接下来进行SpringBoot项目配置改造。

2.SpringBoot项目配置改造

pom文件引入依赖

首先修改Spring Boot项目的pom.xml文件,在pom.xml文件中添加Nacos Config和Nacos Discovery的依赖。

<!--nacos配置管理依赖-->
<dependencies>  
    <!-- Nacos Config -->  
    <dependency>  
        <groupId>com.alibaba.cloud</groupId>  
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>  
        <version>2021.1</version>  
    </dependency>  
    <!-- Nacos Discovery -->  
    <dependency>  
        <groupId>com.alibaba.cloud</groupId>  
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  
        <version>2021.1</version>  
    </dependency>  
</dependencies>
<!--spring cloud从2021.0.5版本起,Spring Cloud将不再默认启用bootstrap,需要手动添加依赖。不引入bootstrap.properties/yml不生效-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

新建bootstrap.yml文件

Spring引入了一种新的配置文件:bootstrap.yaml。它的读取流程如下:启动项目 --> 读取bootstrap.yaml文件 --> 找到nacos中,对应的配置文件 --> 读取本地 application.yaml文件 ---> 创建容器 加载bean ...

因此,我们需要在bootstrap.yml文件中配置Nacos服务器地址和命名空间等信息,在spring中nacos配置中心的配置前缀是 spring.cloud.nacos.config。

spring:  
  application:  
    name: demo-app  
  cloud:  
    nacos:  
      discovery:  
        server-addr: localhost:8848 # Nacos服务地址  
        namespace: your-namespace-id # Nacos命名空间ID  
      config:  
        server-addr: localhost:8848 # Nacos作为配置中心地址  
        namespace: your-namespace-id # Nacos命名空间ID  
        group: your-group # 配置分组名称  
        data-id: your-data-id # 配置ID,通常与spring.application.name相同  
        extension-configs:  
          - data-id: another-data-id # 另一个配置ID  
            group: ANOTHER_GROUP # 另一个配置分组名称
            refresh: true  
        file-extension: yaml # 配置文件格式,默认为properties

或在bootstrap.properties文件中配置Nacos服务器地址和命名空间等信息

# bootstrap.properties  
spring.cloud.nacos.config.server-addr=127.0.0.1:8848  
spring.cloud.nacos.config.namespace=your-namespace  
spring.cloud.nacos.config.group=DEFAULT_GROUP  
spring.cloud.nacos.config.data-id=your-data-id  
spring.cloud.nacos.config.extension-configs[0].data-id=another-data-id  
spring.cloud.nacos.config.extension-configs[0].group=ANOTHER_GROUP  
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

然后,新建两个文件bootstrap-dev.yaml和bootstrap-prod.yaml,文件内容如下,两个文件内容格式是一样的。

spring:  
  cloud:  
    nacos:  
      discovery:  
        server-addr: localhost:8848 # Nacos服务地址  
        namespace: your-namespace-id # Nacos命名空间ID  
        group: your-group # 配置分组名称  
      config:  
        server-addr: localhost:8848 # Nacos作为配置中心地址  
        namespace: your-namespace-id # Nacos命名空间ID  
        group: your-group # 配置分组名称  

在Nacos的配置中,discovery和config是两个核心组件,它们各自承担着不同的职责。

(1)Discovery(服务发现):

Discovery的主要作用是实现服务的自动注册与发现。当服务提供者启动后,它会自动将自己的服务信息注册到Nacos中。而服务消费者则可以通过Nacos查询和发现可用的服务提供者。这样,服务消费者就能够动态地获取到服务提供者的网络位置(如IP和端口),从而实现服务的调用。

服务发现在微服务架构中非常重要,因为它允许服务之间动态地相互发现和通信,而无需硬编码服务地址。这使得服务能够更灵活地部署和扩展,同时也提高了系统的可用性和容错性。

(2)Config(配置管理):

Config的主要作用是实现配置信息的集中管理和动态更新。在微服务架构中,通常会有许多服务共享一些公共的配置信息,如数据库连接信息、缓存配置等。Config允许将这些配置信息统一存储在Nacos中,并通过配置中心进行管理和分发。当配置信息发生变化时,Config能够实时地将最新的配置推送给服务消费者,从而实现配置的动态更新。

配置管理在微服务架构中同样非常重要,因为它允许开发人员在不重启服务的情况下更新配置信息。这大大提高了系统的灵活性和可维护性,同时也降低了运维成本。

(3)区别:

  • 服务发现(Discovery) 专注于服务的注册与发现,解决的是服务之间的通信问题。它使得服务能够动态地发现和调用其他服务,而无需硬编码服务地址。
  • 配置管理(Config) 专注于配置信息的集中管理和动态更新,解决的是配置信息的共享和更新问题。它允许开发人员在不重启服务的情况下实时更新配置信息,从而提高了系统的灵活性和可维护性。

原yml文件改造

可以保留程序启动端口。

server:
    port:1839

3.启动类注解

在Spring Boot启动类上添加 @EnableDiscoveryClient 和 @EnableConfigServer 注解,开启服务发现和配置管理功能。

@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

4.使用配置

在Spring Boot应用中,可以直接通过 @Value 或 @ConfigurationProperties 注解注入Nacos中的配置。@ConfigurationProperties和@Value注解用于获取配置文件中的属性定义并绑定到Java Bean或属性中。

通过@Value(“${xxxx}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value(“${xxxx:yyyy}”)。

@ConfigurationProperties注解对属性绑定遵循relaxed bind rule【暂且翻译为松散绑定规则】,并不需要精确匹配。所谓的宽松绑定原则是指:并不是 JavaBean 中的属性必须要和配置文件中的一致才能绑定数据,context-path 也能绑定到 contextPath 属性上。比如对属性【app.username】,通过【app.userName】、【app.user-name】、【app.user_name】、【app.USER_NAME】、【app.USER-NAME】等都可匹配,我们可理解为模糊匹配。

@RestController
public class ConfigController {
	@Value("${your.config.key}")
	private String configValue;
	
	@GetMapping("/config")
	public String getConfig() {
		return configValue;
	}
}
@Data  // 需要提供默认的构造函数,以及get/setter方法
@ConfigurationProperties("my.service")
public class MyProperties {
    // 我们可以简单地用一个值初始化一个字段来定义一个默认值
    private boolean enabled = true;
 
    private InetAddress remoteAddress;
 
    private final Security security = new Security();
 
    @Data
    public static class Security {
        private String username;
 
        private String password;
        // 如果这个属性配置的话,默认是“USER”
        private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
 
    }
}

在配置文件中进行如下配置,

my:
  service:
    enabled: true
    remoteAddress: 127.0.0.1
    security:
     username: csx
     password: passwoed
     roles:
       - role1
       - role2
your:
    config:
        key:ccvvv

5.测试

最后,可以尝试启动项目程序,看看是否能启动成功。如果启动成功则说明成功了。

通过整合Nacos,Spring Boot项目能够轻松实现配置的动态管理和服务的自动发现。Nacos的简单易用和强大的功能使其成为微服务架构中不可或缺的一部分。通过本文的介绍和示例代码,读者应该能够掌握Spring Boot与Nacos的集成方法,并在实际项目中高效利用Nacos进行服务配置管理。

以上就是SpringBoot使用Nacos进行application.yml配置管理的详细内容,更多关于SpringBoot application.yml配置管理的资料请关注脚本之家其它相关文章!

相关文章

  • 深入了解SpringMVC初始化流程

    深入了解SpringMVC初始化流程

    框架源码是我们 Coding 晋级中的必修课,SSM 应该算是小伙伴们日常接触最多的框架了,这其中 SpringMVC 初始化流程相对来说要简单一些,因此本文就先来和大家分析一下 SpringMVC 初始化流程
    2022-07-07
  • Java8 如何移除两个相同的List对象

    Java8 如何移除两个相同的List对象

    这篇文章主要介绍了Java8 如何移除两个相同的List对象,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java获取当前日期使用实例

    java获取当前日期使用实例

    本文为大家介绍java日期的使用实例,日期输出格式为date:2013-12-17,大家参考使用吧
    2014-01-01
  • 使用Spring从YAML文件读取内容映射为Map方式

    使用Spring从YAML文件读取内容映射为Map方式

    这篇文章主要介绍了使用Spring从YAML文件读取内容映射为Map方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot项目开发常用技术整合

    SpringBoot项目开发常用技术整合

    今天给大家分享springboot项目开发常用技术整合,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)

    Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)

    这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下
    2021-04-04
  • Spring boot整合security详解

    Spring boot整合security详解

    Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,本文主要介绍了SpringBoot整合Security安全框架的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • SpringBoot在IDEA中实现热部署(JRebel实用版)

    SpringBoot在IDEA中实现热部署(JRebel实用版)

    这篇文章主要介绍了SpringBoot在IDEA中实现热部署(JRebel实用版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • springboot实现公众号接收回复消息和超过5秒被动回复消息

    springboot实现公众号接收回复消息和超过5秒被动回复消息

    本文主要介绍了springboot实现公众号接收回复消息和超过5秒被动回复消息,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • java使用des加密解密示例分享

    java使用des加密解密示例分享

    java使用des加密解密示例,适合java语言的所有平台,与.net等平台的加密解密兼容
    2014-02-02

最新评论