@ConfigurationProperties注解的作用是可以根据一个前缀将配置文件的属性映射成一个POJO实体类,只要属性名一致就能自动注入进去,使用起来非常方便,这一点容易与@Configuration注解混淆,@Configuration也可以注解一个配置类,不一样的是它需要为每个属性再次声明绑定的字段,稍微复杂,所以推荐使用@ConfigurationProperties注解。
下面看一个简单的例子,我有一个配置文件,下面包含了多种数据结构的属性,如下:
#Simple properties
mail.host=mailer@mail.com
mail.port=9000
mail.from=mailer@mail.com
#List properties
mail.recipients[0]=admin@mail.com
mail.recipients[1]=owner@mail.com
#Map Properties
mail.additionalHeaders.redelivery=true
mail.additionalHeaders.secure=true
#Object properties
mail.credentials.username=john
mail.credentials.password=password
mail.credentials.authMethod=SHA1
#List<Object>
mail.cs[0].username=cs1
mail.cs[0].password=cs1pwd
mail.cs[0].authMethod=SHA1
mail.cs[1].username=cs2
mail.cs[1].password=cs2pwd
mail.cs[1].authMethod=SHA2
#Map<String,Object>
mail.mp.k1.username=k1
mail.mp.k1.password=pwdk1
mail.mp.k1.authMethod=SHA3
mail.mp.k2.username=k2
mail.mp.k2.password=pwdk2
mail.mp.k2.authMethod=SHA3
现在我们就可以通过@ConfigurationProperties注解将其映射成一个配置类,这样使用起来就非常方便了:
@Configuration
@PropertySource("classpath:mail.properties")
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {
public static class Credentials{
private String authMethod;
private String username;
private String password;
public String getAuthMethod() {
return authMethod;
}
public void setAuthMethod(String authMethod) {
this.authMethod = authMethod;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Credentials{" +
"authMethod='" + authMethod + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
private String host;
private int port;
private String from;
private Credentials credentials;
private List<String> recipients;//接受者
private Map<String,String> additionalHeaders;
private Map<String,Credentials> mp;
private List<Credentials> cs;
//getter setter 省略
}
这个类里面的每个属性和配置里面的属性对应,注意字段名必须是一样的才能赋值:
为了验证是否成功,我们建一个controller类,通过http://localhost:8777/test
来验证一下,看是否成功:
==============简单属性访问================
mailer@mail.com
mailer@mail.com
9000
==============List[String]访问================
[admin@mail.com, owner@mail.com]
==============Map[String,String]访问================
{secure=true, redelivery=true}
==============Object访问================
Credentials{authMethod='SHA1', username='john', password='password'}
==============List[Object]访问================
Credentials{authMethod='SHA1', username='cs1', password='cs1pwd'}
Credentials{authMethod='SHA2', username='cs2', password='cs2pwd'}
==============Map[String,Object]访问================
k2 Credentials{authMethod='SHA3', username='k2', password='pwdk2'}
k1 Credentials{authMethod='SHA3', username='k1', password='pwdk1'}
(注意不支持Set属性)
可以看到,已经成功注入,使用起来非常简洁,不在像spring里面还得通过一大堆xml来注入各种数据结构到Bean里面,使得代码精简了不少。
工程已经分享到github上了,感兴趣的朋友可以star:
https://github.com/qindongliang/spring-boot-properties
分享到:
相关推荐
- 与直接在代码中使用`Environment`接口获取配置相比,`@ConfigurationProperties`提供了类型安全的访问方式,避免了因键值拼写错误导致的异常。 8. **全局配置** - 如果希望某个配置类对整个应用生效,可以将其...
在Spring Boot中注解@ConfigurationProperties有三种使用场景,而通常情况下我们使用的最多的只是其中的一种场景。本篇文章带大家了解一下三种场景的使用情况。 1.2 场景一 使用@ConfigurationProperties和@...
当Spring容器启动时,它会自动扫描标记了`@Component`的类,并实例化这些bean,以便在整个应用中使用。通过在类上添加`@Component`,我们可以告诉Spring这个类是应用程序的一部分,需要进行依赖注入。 接下来,`@...
`spring-boot-2.7.0`源码中,`EnvironmentPostProcessor`接口用于在Spring Environment初始化后处理环境变量,从而实现环境感知。 4. **Web应用启动**:Spring Boot的`WebApplicationInitializer`和`SpringBoot...
Spring Boot是Java开发中的一个流行框架,它极大地简化了创建独立、生产级别的基于Spring的应用程序。这个源码包,"spring-boot-2.0.0.M7",是Spring Boot的2.0.0预发布版本,M7代表的是第七个Milestone版本,即在...
Spring Boot Actuator是一个为Spring Boot应用程序提供生产级别的功能监控和管理的工具。它提供了一系列API端点,允许我们深入应用程序的内部...这些功能使得Spring Boot应用在生产环境中的监控和调试更加容易和高效。
此外,指南还会详细讲解如何配置Spring Boot,包括在`application.properties`或`application.yml`中定义属性,以及如何使用`@ConfigurationProperties`绑定自定义配置。 关于Spring Boot的Web开发,文档会涵盖创建...
《Spring Boot Starter Mybatis在Spring Boot 3.0.1中的集成详解》 Spring Boot以其简洁的配置和快速的应用开发能力,在Java世界中备受青睐。而Mybatis作为一款轻量级的持久层框架,以其灵活的SQL操作和强大的映射...
- 使用Java配置:虽然XML配置方便,但Java配置更符合Spring Boot的风格,可以通过`@MapperScan`注解扫描Mapper接口,`@ConfigurationProperties`处理数据源配置。 - 基于注解的Mapper:使用MyBatis提供的`@...
在Spring Boot框架中,`spring-boot-starter`是其核心特性之一,它提供了一种便捷的方式来启动和配置项目。自定义`spring-boot-starter`是为了满足特定项目需求,将一些通用的功能模块化,方便在多个项目中复用,...
在Spring Boot生态系统中,自定义Starter是一种强大的方式来封装和重用代码,使得其他开发者可以轻松地在他们的项目中引入特定的功能或服务。本文将深入探讨如何通过源码分析来创建一个自定义的Spring Boot Starter...
本文将深入探讨如何在Spring Boot 3.0.0版本中集成MyBatis,以及相关的配置和使用技巧。 一、Spring Boot 3.0.0简介 Spring Boot 3.0.0是Spring框架的重要更新,带来了更好的性能优化、新的特性以及对最新技术栈的...
starter-mybatis`是Spring Boot为Mybatis提供的一个起步依赖,它包含了Mybatis、Mybatis-Spring和相关依赖,使得开发者无需手动管理这些依赖,只需要引入这个starter,就可以快速地在Spring Boot项目中使用Mybatis。...
- **在Spring环境中使用YAML暴露属性**:使用YAML配置Spring Bean属性。 - **Multi-profile YAML文档**:支持多环境配置。 - **YAML缺点**:讨论YAML相对于Properties文件的局限性。 - **类型安全的配置属性**:...
它允许你封装特定的功能,并使其易于在任何Spring Boot项目中使用。通过创建`redis-spring-boot-starter`,你可以确保团队或社区成员可以无缝地连接和操作Redis数据库,同时保持项目整洁和模块化。
@ConfigurationProperties注解使用方法(源代码) 目录 @ConfigurationProperties注解使用方法 前言 一、Spring配置方式 1.1 第一阶段:xml配置 1.2 第二阶段:注解配置 1.3 第三阶段:Java配置(java config) 二、@...
Spring Boot Documentation 1. About the Documentation 2. Getting Help 3. First Steps 4. Working with Spring Boot 5. Learning about Spring Boot Features 6. Moving to Production 7. Advanced Topics II. ...
统一引入Spring Boot版本可以在父POM中设定,所有子模块将继承这个版本。 运行Spring Boot应用可以通过命令行的 `java -jar`,或者在IDE中直接运行主类。 打包Spring Boot项目通常使用 `mvn clean package` 或 `...
{@ConfigurationProperties} 是 Spring Boot 2.0 中的一个核心功能,用于简化外部化配置方式的使用。通过使用 {@ConfigurationProperties},可以轻松地访问属性文件中定义的属性,并将其绑定到 Java Bean 中。本文将...
在 Maven 或 Gradle 项目中添加相应的依赖,如 `spring-boot-starter-web`,即可开启 Web 开发支持。 ### 3. 编写主程序 Spring Boot 的入口点是标记为 `@SpringBootApplication` 的类,通常命名为 `Application`...