千家信息网

SpringBoot中@ConfigurationProperties怎么使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"SpringBoot中@ConfigurationProperties怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spr
千家信息网最后更新 2026年11月02日SpringBoot中@ConfigurationProperties怎么使用

这篇文章主要讲解了"SpringBoot中@ConfigurationProperties怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"SpringBoot中@ConfigurationProperties怎么使用"吧!

添加依赖关系

首先我们需要添加Spring Boot依赖:

org.springframework.boot spring-boot-starter-parent

一个简单的例子

@ConfigurationProperties需要和@Configuration配合使用,我们通常在一个POJO里面进行配置:

@Data@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { private String hostName; private int port; private String from;}

上面的例子将会读取properties文件中所有以mail开头的属性,并和bean中的字段进行匹配:

#Simple propertiesmail.hostname=host@mail.commail.port=9000mail.from=mailer@mail.com

Spring的属性名字匹配支持很多格式,如下所示所有的格式都可以和hostName进行匹配:

mail.hostNamemail.hostnamemail.host_namemail.host-namemail.HOST_NAME

如果你不想使用@Configuration, 那么需要在@EnableConfigurationProperties注解中手动导入配置文件如下:

@SpringBootApplication@EnableConfigurationProperties(ConfigProperties.class)public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args); }}

我们也可以在@ConfigurationPropertiesScan中指定Config文件的路径:

@SpringBootApplication@ConfigurationPropertiesScan("com.flydean.config")public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args); }}

这样的话程序只会在com.flydean.config包中查找config文件。

属性嵌套

我们可以嵌套class,list,map, 下面我们举个例子,先创建一个普通的POJO:

@Datapublic class Credentials { private String authMethod; private String username; private String password;}

然后创建一个嵌套的配置文件:

@Data@Configuration@ConfigurationProperties(prefix = "nestmail")public class NestConfigProperties { private String host; private int port; private String from; private List defaultRecipients; private Map additionalHeaders; private Credentials credentials;}

对应的属性文件如下:

# nest Simple propertiesnestmail.hostname=mailer@mail.comnestmail.port=9000nestmail.from=mailer@mail.com#List propertiesnestmail.defaultRecipients[0]=admin@mail.comnestmail.defaultRecipients[1]=owner@mail.com#Map Propertiesnestmail.additionalHeaders.redelivery=truenestmail.additionalHeaders.secure=true#Object propertiesnestmail.credentials.username=johnnestmail.credentials.password=passwordnestmail.credentials.authMethod=SHA1

@ConfigurationProperties和@Bean

@ConfigurationProperties也可以和@Bean一起使用如下所示:

@Datapublic class Item { private String name; private int size;}

看下怎么使用:

@Data@Configurationpublic class BeanConfigProperties { @Bean @ConfigurationProperties(prefix = "item") public Item item() { return new Item(); }}

属性验证

@ConfigurationProperties可以使用标准的JSR-303格式来做属性验证。我们举个例子:

@Data@Validated@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { @NotEmpty private String hostName; @Min(1025) @Max(65536) private int port; @Pattern(regexp = "^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,6}$") private String from;}

如果我们的属性不满足上诉条件,可能出现如下异常:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'mail' to com.flydean.config.ConfigProperties$$EnhancerBySpringCGLIB$$f0f87cb9 failed: Property: mail.port Value: 0 Reason: 最小不能小于1025 Property: mail.hostName Value: null Reason: 不能为空Action:Update your application's configurationProcess finished with exit code 1

属性转换

@ConfigurationProperties也支持多种属性转换,下面我们以Duration和DataSize为例:

我们定义两个Duration的字段:

@ConfigurationProperties(prefix = "conversion")public class PropertyConversion { private Duration timeInDefaultUnit; private Duration timeInNano; ...}

在属性文件中定义这两个字段:

conversion.timeInDefaultUnit=10conversion.timeInNano=9ns

我们看到上面的属性可以带单位的。可选的单位是:ns, us, ms, s, m, h 和 d,分别对应纳秒,微妙,毫秒,秒,分钟,小时和天。默认单位是毫秒。我们也可以在注解中指定单位:

@DurationUnit(ChronoUnit.DAYS)private Duration timeInDays;

对应的配置文件如下:

conversion.timeInDays=2

下面我们再看看DataSize怎么使用:

private DataSize sizeInDefaultUnit; private DataSize sizeInGB; @DataSizeUnit(DataUnit.TERABYTES)private DataSize sizeInTB;

对应的属性文件:

conversion.sizeInDefaultUnit=300conversion.sizeInGB=2GBconversion.sizeInTB=4

Datasize支持B, KB, MB, GB 和TB。

自定义Converter

同样的Spring Boot也支持自定义属性转换器。我们先定义一个POJO类:

public class Employee { private String name; private double salary;}

对应的属性文件:

conversion.employee=john,2000

我们需要自己实现一个Converter接口的转换类:

@Component@ConfigurationPropertiesBindingpublic class EmployeeConverter implements Converter { @Override public Employee convert(String from) { String[] data = from.split(","); return new Employee(data[0], Double.parseDouble(data[1])); }}

感谢各位的阅读,以上就是"SpringBoot中@ConfigurationProperties怎么使用"的内容了,经过本文的学习后,相信大家对SpringBoot中@ConfigurationProperties怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

属性 文件 例子 单位 支持 配置 字段 格式 学习 验证 两个 中指 内容 注解 面的 微妙 普通 最小 这样的话 名字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 新华互联网科技 为想互联网科技怎么样 网络科技有限互联网 关于新基建和互联网科技 互联网金融 科技金融 深圳互联网络科技有限公司 顺玮阁互联网科技 齐家互联网科技有限公司 甘肃拓世互联网科技有限公司 创业天下互联网科技有限公司 贵州叶脉互联网科技有限公司所属行业 移动互联网科技公司 富国互联网金融科技混合基金 富国互联网科技002692 互联网与数字科技关系 神州科技互联网有限公司 昆明中奇联合互联网科技 长沙渺峰互联网科技有限公司 重庆科技产业互联网有哪些 互联网下的科技发展 富国互联网科技创新基金 以后互联网后是啥科技 世界互联网科技公司市值排名 民营互联网公司国防科技 高科技互联网发展前景如何 图游互联网科技 互联网科技企业商标注意事项 兰石爱特工业互联网科技分公司 互联网科技创新创业项目
0