千家信息网

SpringBoot中@ConfigurationProperties怎么使用

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"SpringBoot中@ConfigurationProperties怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spr
千家信息网最后更新 2025年11月08日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安全错误 数据库的锁怎样保障安全 政务外网网络技术参考指南 河南c语言软件开发靠谱吗 白巧克力视频软件开发 大学法制主题宣教中心软件开发 庐阳区网络技术咨询有哪些 linux 服务器搭建课程 服务器挂载不上硬盘几个原因 eclipse链接数据库 数据库加函数 polardb数据库概念股 长城汽车软件开发面试 数据库如何从记事本中调数据 西安直播软件开发哪家公司好 如何在大学里保护自己的网络安全 sd数据库官网 mysql框架连接不上服务器 广东网络技术转让哪家便宜 服装软件与sql数据库 网络安全专业内容视频 深圳小鹅网络技术有限公司待遇 网络安全等级保护认证收费 江苏net软件开发价格表 学习通服务器网络异常 i3可以当服务器来用吗 网络安全风险把控管理 士官生计算机网络技术就业方向 中高风险数据对接软件开发 复古传奇三端互通服务器 长沙有涯科技网络技术 web 小型服务器
0