解读@ConfigurationProperties的基本用法

 更新时间:2025年03月28日 10:49:12   作者:wddblog  
这篇文章主要介绍了@ConfigurationProperties的基本用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@ConfigurationProperties的基本用法

@ConfigurationProperties 是 Spring Boot 框架中提供的一个非常有用的注解,它允许开发者将外部的配置属性(如 application.properties 或 application.yml 文件中的属性)自动绑定到 JavaBean 对象上。这使得从配置文件中读取属性并注入到应用程序的组件中变得非常简单和直观。

在 Spring Boot 应用中,@ConfigurationProperties 通常与 @Component 或其他 Spring 管理的组件注解一起使用。

当 Spring Boot 启动时,它会扫描这些带有 @ConfigurationProperties 注解的类,并将配置文件中的属性自动绑定到这些类的字段上。

例如:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String name;
private int version;
// getters and setters
}

在这个例子中,AppProperties 类中的字段将会自动绑定到配置文件中以 app 为前缀的属性。

例如,如果 application.properties 文件中有如下配置:

properties
app.name=MyApp
app.version=1.0

那么 Spring Boot 就会将这些属性值注入到 AppProperties 类的相应字段中。

@ConfigurationProperties的高级用法

除了基本的属性绑定外,@ConfigurationProperties 还支持更复杂的配置,如嵌套属性、列表和映射等。

嵌套属性

你可以使用嵌套类来处理配置文件中的嵌套属性。

@Component
@ConfigurationProperties(prefix = "database")
public class DatabaseProperties {
private String url;
private UserProperties user;

// getters and setters

public static class UserProperties {
private String name;
private String password;

// getters and setters
}
}

在配置文件中,你可以这样配置嵌套属性:

properties

database.url=jdbc:mysql://localhost:3306/mydb 
database.user.name=root 
database.user.password=secret

列表和映射

@ConfigurationProperties 也支持将配置属性绑定到 Java 的列表(List)和映射(Map)类型。

@Component 
@ConfigurationProperties(prefix = "emails") 
public class EmailProperties { 
private List<String> addresses; 
private Map<String, String> aliases; 


// getters and setters 
}

在配置文件中,可以这样配置:

properties

emails.addresses[0]=user1@example.com 
emails.addresses[1]=user2@example.com 
emails.aliases.alice=alice@example.com 
emails.aliases.bob=bob@example.com

@ConfigurationProperties的验证

你还可以使用标准的 Java Bean Validation 注解(如 @NotNull@Size 等)对配置属性进行验证。

如果验证失败,Spring Boot 会在启动时抛出异常。

import javax.validation.constraints.NotNull;

import javax.validation.constraints.Size;



@Component

@ConfigurationProperties(prefix = "app")

@Validated

public class AppProperties {

@NotNull

private String name;



@Size(min = 1, max = 50)

private String description;



// getters and setters

}

注意事项:

  • 启用配置属性绑定:确保你的 Spring Boot 应用已经启用了 @EnableConfigurationProperties 注解,或者将带有 @ConfigurationProperties 的类声明为 @Component,以便 Spring Boot 能够自动发现并绑定配置属性。
  • 属性名匹配:配置文件中的属性名必须与 JavaBean 的字段名匹配(考虑驼峰命名法与下划线命名法的转换)。如果它们不匹配,你需要使用 @Value 注解来手动绑定属性。
  • 配置文件位置@ConfigurationProperties 默认从 application.propertiesapplication.yml 文件中读取配置。你也可以定义其他的配置文件,并通过 @PropertySource 注解指定它们的位置。
  • 性能考虑:由于 @ConfigurationProperties 在启动时绑定所有配置属性,因此如果配置属性很多或者很大,可能会对启动时间产生影响。在这种情况下,可以考虑使用 @Value 注解来单独注入需要的属性。
  • 安全性:注意不要在配置文件中暴露敏感信息,如密码或密钥。考虑使用环境变量或加密的配置文件来存储这些信息。

除了上述提到的基本用法和高级特性外,@ConfigurationProperties 还有一些其他值得注意的点:

自定义前缀和位置

@ConfigurationProperties 注解中,你可以通过 prefix 属性指定配置属性的前缀。

这样,Spring Boot 就会自动匹配该前缀下的所有属性,并将它们绑定到对应的字段上。同时,你也可以通过其他方式(如 @PropertySource)指定配置文件的位置。

激活特定配置文件

Spring Boot 支持通过 spring.profiles.active 属性来激活特定的配置文件。你可以为不同的环境(如开发、测试、生产)创建不同的配置文件,并在运行时选择激活哪个配置文件。

@ConfigurationProperties 注解的类也可以与特定的配置文件关联,从而实现不同环境下的不同配置。

自定义属性绑定规则

有时,配置文件中的属性名可能与 JavaBean 的字段名不完全匹配,或者你可能需要应用一些自定义的转换逻辑。

在这种情况下,你可以使用 @ConfigurationPropertiesBinding 注解或自定义的 Converter 类来定义自己的属性绑定规则。

监听配置变化

Spring Boot 还提供了 @ConfigurationProperties 的一个扩展注解 @NestedConfigurationProperty,它允许你监听嵌套属性的变化,并在属性更新时执行特定的逻辑。

这对于需要动态响应配置变化的场景非常有用。

与其他注解的协同工作

@ConfigurationProperties 可以与其他 Spring 注解(如 @Value@Autowired 等)协同工作,从而提供更加灵活和强大的配置管理能力。

你可以根据需要在同一个类中使用多个注解,以满足不同的配置需求。

最佳实践

  1. 明确配置前缀:为每个配置类指定一个明确的配置前缀,以避免属性名冲突。
  2. 验证配置属性:使用 Java Bean Validation 对配置属性进行验证,确保配置的正确性。
  3. 文档化配置:为配置属性提供清晰的文档说明,包括属性的作用、取值范围、默认值等,以便其他开发者理解和使用。
  4. 避免硬编码:尽量不要在代码中硬编码配置属性的值,而是使用 @ConfigurationProperties@Value 注解从配置文件中读取。
  5. 测试配置:编写单元测试来验证配置属性的绑定和验证逻辑是否正确。

总结

@ConfigurationProperties 是 Spring Boot 中一个功能强大的注解,它简化了从配置文件到 JavaBean 的属性绑定过程,提高了应用的灵活性和可维护性。

通过合理使用该注解,你可以更加高效地管理配置属性,实现更加健壮和可配置的 Spring Boot 应用。同时,也需要注意一些使用上的最佳实践和注意事项,以确保配置的正确性和应用的稳定性。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java反射及性能详细

    Java反射及性能详细

    这篇文章主要介绍了Java反射及性能,现如今的java工程中,反射的使用无处无在。无论是设计模式中的代理模式,还是红透半边天的Spring框架中的IOC,AOP等等,都存在大量反射的影子。下面我们就对该话题进行详细介绍,感兴趣的小伙伴可以参考一下
    2021-10-10
  • Java编程获取文件列表及子文件目录的方法(非递归)

    Java编程获取文件列表及子文件目录的方法(非递归)

    这篇文章主要介绍了Java编程获取文件列表及子文件目录的方法(非递归),具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • springboot切换使用undertow容器的方式

    springboot切换使用undertow容器的方式

    最近稍微有点空闲,回头再来优化下基础框架,也是一种重新学习。今天主要写写跟大家分享下springboot使用undertow,废话不多说
    2022-07-07
  • java实现获取用户的MAC地址

    java实现获取用户的MAC地址

    本文给大家汇总介绍了下使用java实现获取客户端用户的MAC地址的方法,当然最后一种更全面一些,有需要的小伙伴们可以根据需求自由选择。
    2015-10-10
  • SpringBoot整合ActiveMQ过程解析

    SpringBoot整合ActiveMQ过程解析

    这篇文章主要介绍了SpringBoot整合ActiveMQ过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • springboot使用RedisRepository操作数据的实现

    springboot使用RedisRepository操作数据的实现

    本文主要介绍了springboot使用RedisRepository操作数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • MyBatis-Plus自动化填充的踩坑记录及解决

    MyBatis-Plus自动化填充的踩坑记录及解决

    这篇文章主要介绍了MyBatis-Plus自动化填充的踩坑记录及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Spring Cloud Ribbon实现客户端负载均衡的方法

    Spring Cloud Ribbon实现客户端负载均衡的方法

    本篇文章主要介绍了Spring Cloud Ribbon实现客户端负载均衡的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Java加解密工具类源码示例

    Java加解密工具类源码示例

    最近在项目中接触到了数据加解密的业务,数据加密技术是网络中最基本的安全技术,这篇文章主要给大家介绍了关于Java加解密工具类源码的相关资料,需要的朋友可以参考下
    2023-11-11
  • 聊聊Java和CPU的关系

    聊聊Java和CPU的关系

    java和cpu关系不大,但是也有点关系,下面我们来聊一聊java和cpu的关系,感兴趣的朋友一起看看吧
    2016-08-08

最新评论