SpringBoot:自定义类型的属性如何从配置文件中正确加载
创始人
2025-05-30 09:06:03
0

      使用SpringBoot的@ConfigurationProperties机制加载.properties或.yaml文件时,对于java类型为primitive type、String、日期或时间以及它们对应的数组和集合等类型,SpringBoot会自动将配置文件中的属性值,根据java属性的类型正确解析。

     处理过程中会使用转换器(org.springframework.core.convert.converter.Converter),

SpringBoot默认要加载的转换器都配置在如下类中:

org.springframework.boot.convert.ApplicationConversionService

     但对于一些自定义类型,如果需要SpringBoot能正解析并能正确的创建这此类型的对象,则需要自己实现org.springframework.core.convert.converter.Converter接口,并实现类上使用注解@ConfigurationPropertiesBinding

    下面举例说明:

application.yaml

server:
      testUrl: http://127.0.0.1:8080
      codec: org.redisson.codec.Kryo5Codec

存放属性的java类

@Configuration
@ConfigurationProperties(prefix = "server")
public class ConfigProperties {private URL testUrl;private Codec codec;public URL getTestUrl() {return testUrl;}public void setTestUrl(URL testUrl) {this.testUrl = testUrl;}public Codec getCodec() {return codec;}public void setCodec(Codec codec) {this.codec = codec;}
}

转换器类

import java.net.URL;import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;@Component
@ConfigurationPropertiesBinding
public class URLConverter implements Converter {@Overridepublic URL convert(String source) {try {if (StringUtils.hasLength(source)) {return new URL(source);}} catch (Exception e) {e.printStackTrace();}return null;}
}
import org.redisson.client.codec.Codec;
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;@Component
@ConfigurationPropertiesBinding
public class CodecConverter implements Converter {@Overridepublic Codec convert(String source) {try {if (StringUtils.hasLength(source)) {return (Codec) Class.forName(source.trim()).newInstance();}} catch (Exception e) {e.printStackTrace();}return null;}
}

通过以上转换器,SpringBoot就能自动根据配置中的字符串,正常创建实例,并赋值给对应属性。

参考文档

https://docs.spring.io/spring-framework/docs/5.3.25/reference/html/core.html#core-convert

相关内容

热门资讯

光电器件——光电半导体器件简介... 首先我们进入光电器件的简介 主要由三五族来形成无机光电半导体 我们用二六族来形成的话,...
9、Cascaded Diff... 简介 主页:https://cascaded-diffusion.github.io/...
央视首推情感教育纪录片《镜子》... (4月19日)晚,央视纪录片《镜子》首播,给了中国家庭教育当头一棒。  之所以取名“镜子”,是因为“...
朱泾二小:满足孩子与家长的幸福... 教育工作要以孩子和家长“幸福”为追求,满足了学生个性化发展的需求,满足了家长自我提高的需求,家校共同...
争做模范好家长 共育家教新篇章... 为发现和宣传在家庭教育方面有创新有实效的好家长,以及关心教育,支持学校、班级工作的“好家长”先进典型...
比起富养孩子,培养孩子的抗挫商... 1去年十一月,安徽电视台记者段丹峰为情跳楼自杀。自杀前曾连发五小时微博,可见那段时间内她内心遭受多么...
蒙山中学:爆棚的“创城力” 蒙... 家校携手共创城4月27日上午,“我为创城 文明家校”金山区中学家校工作座谈会在蒙山中学举行,来自全区...
Notion汉化 市面上笔记软件五花八门,都各有特色。wolai、语雀、飞书、印象笔记、石墨、幕布、为知...
最新或2023(历届)5月20... 我们用全部的爱关爱家人,我们期待孩子健康快乐的长大,我们竭尽所有把最好的给孩子!每一个小天使的降临,...
最新或2023(历届).5.9... 亲爱的家人朋友们:欢迎您来到美丽的杭州,参加最新或2023(历届)5月9日—5月11日(周二至周四)...
孩子写作业总是拖拖拉拉?家庭教... 成就孩子美好人生!上城区学生成长支持中心第三讲“督促孩子完成作业的窍门 ”,欢迎家长朋友通过微信报名...
反腐正剧《人民的名义》,是一部... 《人民的名义》自最新或2023(历届)3月28日开播以来,已接近一个月,热度不减,而据CSM52城市...
Spring Boot 自定义... 概述 因为最近一直在为公司搭建底层框架, 好久没有更新博客了,本次搭建的框架结构...
想提升宝宝情商,家庭教育很关键... 爸爸妈妈们,你们是否有过对于如何培养宝宝情商的问题的犯难?可能我们可以给宝宝上最好的学校,或者根据宝...
Redis(九):并发问题 前言 上一篇介绍了 Redis 的内存管理。这节开始介绍 Redis 并发方面的问题。 Redis ...
python多线程 文章目录一、简介1.1 多线程的特性1.2 GIL二、线程1.2 单线程1.3 多线程三、线程池3....
綦江区成为家校共育区域性研究实... 4月26日—27日,中国教育学会“十三五”教育科研重点课题“基础教育阶段家校共育的理论与实践研究”现...
曲阜《教子有方》&lt... 一个孩子的教育成功,是全家人的成功!一个孩子的教育失败,是全家人的失败!——————赵国彦任何事业的...
《家庭教育》杂志创刊三十年贺词... 中国家庭教育学会副会长、北京师范大学教授赵忠心(杭州《家庭教育》杂志最新或2023(历届)第一二期)...
美国男人为什么不包二奶? 外国... 1、信仰美国的社会,大部分人们对宗教很虔诚。而对于教徒对婚姻、家庭的忠诚,宗教有很明确的要求,有些宗...