Spring Boot 配置中心与应用属性完美匹配 | 深入探究@ConfigurationProperties与@NacosPropertySource

本文主要是介绍Spring Boot 配置中心与应用属性完美匹配 | 深入探究@ConfigurationProperties与@NacosPropertySource,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

@ConfigurationProperties

@ConfigurationProperties 注解是 Spring Boot 中用于将外部配置文件(如 YAML 或 properties 文件)中的属性映射到 Java Bean 类属性的强大工具。

以下是关于 @ConfigurationProperties 注解与 YAML 配置文件属性匹配规则的详细说明:

前缀匹配:在 @ConfigurationProperties 注解中,通过 prefix 属性指定了配置文件中属性的前缀。Spring Boot 会查找所有以该前缀开头的属性,并将它们映射到 Java Bean 类的对应属性上。

驼峰命名规则:YAML 配置文件中的属性名通常使用短横线分隔单词(例如 my-property-name),而 Java Bean 类的属性名则遵循驼峰命名规则(例如 myPropertyName)。Spring Boot 会自动将短横线分隔的属性名转换为驼峰命名,并与 Java Bean 类的属性进行匹配。

属性类型转换:Spring Boot 会尝试自动将 YAML 配置文件中的属性值转换为 Java Bean 类属性的相应类型。例如,如果 YAML 文件中有一个字符串值,而 Java Bean 类中的属性是一个 int 类型,Spring Boot 会尝试进行类型转换。如果转换失败,将会抛出异常。

集合类型匹配:当 Java Bean 类的属性是集合类型(如 ListSetMap 等)时,Spring Boot 会尝试将 YAML 配置文件中的数组或列表语法映射到这些集合类型上。通过在 YAML 文件中使用列表(以 - 开头)或映射(key-value 对)语法,可以轻松地为集合类型的属性提供配置值。

默认值:您可以在 Java Bean 类的属性上设置默认值,这样即使 YAML 配置文件中没有指定该属性的值,Java Bean 类的属性也会使用这些默认值。此外,您还可以在 @ConfigurationProperties 注解中指定 ignoreUnknownFields 属性来控制是否忽略配置文件中的未知属性。

下面是一个简单的示例代码,演示了如何使用 @ConfigurationProperties 注解与 YAML 配置文件进行属性匹配:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {private String appName;private int port;private List<String> servers;// 必须提供 getter 和 setter 方法,以便 Spring 能够注入属性值public String getAppName() {return appName;}public void setAppName(String appName) {this.appName = appName;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public List<String> getServers() {return servers;}public void setServers(List<String> servers) {this.servers = servers;}
}

假设在 application.yml 配置文件中定义了如下属性:

myapp:app-name: "My Application"port: 8080servers:- "server1"- "server2"- "server3"

通过以上配置,Spring Boot 会自动将 myapp.app-namemyapp.portmyapp.servers 的值注入到 MyAppProperties 类对应的属性中,无需编写任何额外的配置代码。这使得从配置文件中读取属性变得非常简单和直观。

@NacosPropertySource

@NacosPropertySource 是 Spring Cloud Alibaba Nacos Config 提供的一个注解,它允许开发者从 Nacos 配置中心加载配置,并将这些配置属性注入到 Spring 容器中。这个注解与 Nacos 配置中心中的配置文件有特定的匹配规则,同时它也可以与 @ConfigurationProperties@Value 注解一起使用,以便将配置属性映射到 Java 类中。

Nacos 配置文件命名规则
在 Nacos 配置中心,配置文件的命名通常遵循 {dataId}.{group} 的格式。其中,dataId 是配置的唯一标识符,用于区分不同的配置项;group 是配置的分组,用于对配置进行逻辑上的分类。

@NacosPropertySource 注解使用
在 Spring Boot 应用的启动类或配置类上,你可以使用 @NacosPropertySource 注解来指定要加载的 Nacos 配置文件的 dataIdgroup。这个注解告诉 Spring Boot 从 Nacos 配置中心加载指定的配置文件,并将其内容作为属性源添加到 Spring 环境中。

属性值注入

  • 使用 @Value 注解:你可以在 Java 类的字段上使用 @Value 注解,并通过 ${property.name} 的形式来引用 Nacos 配置中的属性。Spring Boot 会自动将这些属性注入到相应的字段中。

  • 使用 @ConfigurationProperties 注解:对于更复杂的配置,如包含多个属性的对象或集合,你可以使用 @ConfigurationProperties 注解。这个注解允许你将一组相关的配置属性绑定到一个 Java 类上。你需要在类上指定前缀(prefix),Spring Boot 会根据这个前缀从属性源中匹配对应的属性,并自动注入到类的字段中。

示例代码

首先,在 Nacos 配置中心创建一个配置文件,例如 example.properties,内容如下:

# example.properties
app.name=My Application
app.port=8080

然后,在一个配置类中使用 @Value@ConfigurationProperties 注解将属性值注入到 Java 类中:

使用 @Value 注解:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
@NacosPropertySource(dataId = "example.properties", autoRefreshed = true)
public class MyAppProperties {@Value("${app.name}")private String appName;@Value("${app.port}")private int port;// 省略 getter 和 setter 方法
}

通过以上配置,Spring Boot 应用会从 Nacos 配置中心加载 example.properties 文件的配置,并将 app.nameapp.port 的值注入到相应的 Java 类中。当 Nacos 配置中心中的配置发生变化时,如果启用了配置刷新功能(通过 @RefreshScope),应用可以动态地更新这些配置。

注意:如果在配置类当中有配置值(java类),但是配置文件中也有值(yml文件或者nacos配置),会优先优先使用配置文件当中的值。

这篇关于Spring Boot 配置中心与应用属性完美匹配 | 深入探究@ConfigurationProperties与@NacosPropertySource的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832403

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res