SpringBoot:自定义类型的属性如何从配置文件中正确加载
使用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<String, URL> {@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<String, Codec> {@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
相关文章
- 【Verilog语法013】verilog多维数组(多维矩阵)的写法
有两种表示方法:一种是verilog语法的多维数组,另一种是system verilog语法的多维数组。 这是verilog语法: reg [A1:A0] a [B1:B0] [C1:C0] [D1:D0] ; 引用顺序是:a[B][C][D][A], 定义的a 的左边只有位宽,一对方括号[…...
2023/3/28 15:42:00 - netstat命令参数和arp命令
Usage: netstat [-ral] [-tuwx] [-en] Display networking information -r Routing table -----------------------查看路由表 -a All sockets 所有套接字状态 -l Listening sockets …...
2023/3/28 15:41:49 - macOS Ventura 13.3 (22E252) 正式版发布,ISO、IPSW、PKG 下载
请访问原文链接:https://sysin.org/blog/macOS-Ventura/,查看最新版。原创作品,转载请保留出处。 2023 年 3 月 27 日 (北京时间 28 日凌晨),macOS Ventura 13.3 正式版发布,本更新包括全新表情…...
2023/3/28 15:41:12 - Java设计模式(六)—— 命令模式
命令模式定义如下:将一个请求封装为一个对象,从而使用户可用不用的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 适合命令模式情景如下: 程序需要在不同的时刻指定、排列和执行请求程序需要…...
2023/3/28 15:39:02 - 12代酷睿安装神器!34元让小白装机也不会戳弯针脚
12th CPU 扣件强度太高疑似会造成 CPU 上的金属盖 IHS 中央出现凹陷 虽然我已经在粉丝团已经用数颗全新的 CPU 告诉大家 IHS 从过去刚存在开始到现在,中间就一直存在凹陷公差 即便如此 ~ 原厂 CPU 扣件强度极高,但防板弯的设置强度不足仍然不争的事实 如…...
2023/3/28 15:34:27 - 【ChatGPT】GPT实现原理大解析——看完就知道什么叫颠覆
文章目录前言一、ChatGPT是什么?二、那么,如何计算下一个单词的概率?三, 什么是模型?四,如何制作能完成人类任务的模型五,神经网络总结前言 ChatGPT 能够自动生成类似于人类写作的文本…...
2023/3/28 15:34:09 - OTA(Over-the-air programming)是什么?
OTA(Over the air-programming)是什么? ‒ 是指将新软件,固件,设置,加密密钥更新无线发布到手机,机顶盒等设备的方式。 ‒ 对于固件而言,由于安装在诸如ROM,EPROM和flash memory等的…...
2023/3/28 15:32:53 - FastJson序列化时过滤字段(属性)的方法总结
FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法。 方法一、FastJson的注解 JSONField(serialize false)private String name; 最便捷&am…...
2023/3/28 15:32:21 - 相机单独标定的实现过程[autoware标定]、tmp文件的查看方式
安装了autoware1.13和calibration标定包,发现实现相机单独标定的过程较为坎坷,参考了一些博主的方法,发现下面的过程更加适合自己,做个笔记。 1安装标定箱(与calibration标定包的安装并不冲突) 标定工具箱…...
2023/3/28 15:31:55 - seata 使用
1 下载地址 Releases seata/seata GitHub 2 版本 seat 1.6.0 修改配置文件 applciation.yml server: port: 7091 spring: application: name: seata-server logging: config: classpath:logback-spring.xml file: path: ${user.home}/logs/seata e…...
2023/3/28 15:25:31 - 人大金仓赋能网络安全产业,筑牢数字经济发展安全底线
近日,由广东省网络空间安全协会与广东关键信息基础设施保护中心联合举办的网安联广东网络安全大会(首届)暨2023广东省网络空间安全协会年会圆满结束。作为广东省网络空间安全协会会员单位,人大金仓受邀参加,并围绕“国…...
2023/3/28 15:22:37 - Unity和GAN实现AI绘画五等分的新娘、国家队02(附源码)
UnityGAN实现AI绘画五等分的新娘、国家队02附源码写在前面源码演示视频部分界面展示使用教程敬请期待其他写在后面写在前面 博主喜欢二次元,想着在读研期间做点对自己有意义的事,因此选择了动漫人物生成方向(呜呜呜,太感谢导师理解和支持了)…...
2023/3/28 15:20:15 - 4. git 配置 Gitee 远端指定仓库并提交代码
1. 第一步:先创建一个远程仓库 点击创建后,会显示如下界面,箭头所指的地方就是目前创建的仓库的远程地址: 2. 第二步:配置SSH公钥 首先打开git bash,在命令行里输入以下命令: ssh-keygen -t…...
2023/3/28 15:16:33 - TextCNN文本分类
TextCNN 模型主要由一维卷积层和时序最大池化层构成,一维卷积层是高为 1 的二维卷积层,在每个通道上,卷积核与输入做互相关运算,并将通道之间的结果相加得到输出结果。 时序最大池化层对应一维全局最大池化层,特点是卷…...
2023/3/28 15:13:58 - 数据库系统-建模
文章目录一、建模思想1.2 ER1.2.1 实体1.2.2 属性1.2.3 联系1.3 ER的表示方法1.3.1 chen方法1.3.2 Crow’s foot方法二、工程化方法2.1 IDEFx概念2.1.1 实体2.1.2 联系三、数据建模&数据库设计3.1 总览3.1 需求分析3.2 概念数据库设计3.2.1 局部ER模型设计3.2.2 全局ER图设…...
2023/3/28 15:10:08 - Machine Learning-Ex2(吴恩达课后习题)About Logistic Regression
1. Logistic Regression1.1 Visualizing the dataData:学生两次测试的分数、是否被录取(0/1表示)plot.pyimport matplotlib.pyplot as plt # 数据图形化def Plot(data):# isin函数接收列表positive data[data.Admitted.isin([1])] # 正样本…...
2023/3/28 15:08:32 - 意大利FBA海运主要港口有哪些
意大利FBA海运主要港口有哪些?意大利是一个位于亚平宁半岛的欧洲国家,与亚得里亚海、爱奥尼亚海、第勒尼安海和利古里亚海接壤,它在欧洲、亚洲和北非有重要的海上贸易。这是一个受欢迎的旅游景点,靠近苏伊士运河和直布罗陀海峡&am…...
2023/3/28 15:07:05 - R语言计算多元积分
目录0引言一、包的载入与认识二、使用实例2.1 参数解析2.2 运行实例1:多元正态分布的积分2.3 运行实例2:二元函数积分三、总结与展望0引言 在R语言中我们经常使用integrate函数计算一元积分,例如:《R语言 【integrate】函数》1. …...
2023/3/28 15:05:05 - 解决git push报错fatal: Authentication failed for ‘https://github.com/xxx.git/‘
目录 问题现象 解决方式 问题现象 remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for informat…...
2023/3/28 15:01:43 - c++11 标准模板(STL)(std::unordered_multiset)(十二)
定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_multiset;(1)(C11 起)namespace pmr { …...
2023/3/28 15:00:58 - MySQL出现too many connections错误
MySQL出现too many connections报错 1、现象 navicat连接MySQL时报too many connections错误 2、原因 my.ini 中设定的并发连接数太少或者系统繁忙导致连接数被占满。 连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout 都有关。 wait_timeout 的值越大,连…...
2023/3/28 14:57:23 - 使用Netty,当然也要了解它的连接闲置处理
连接闲置网络连接的闲置指的是当前网络连接处于空闲状态,即没有正在进行的数据传输或通信活动。当我们的某个连接不再发送请求或者接收响应的时候,这个连接就开始处于闲置状态。网络连接的闲置时间越长,说明该连接越不活跃。此时,…...
2023/3/28 14:56:40 - EPPlus电子表格的.NET库Crack
EPPlus电子表格的.NET库Crack 改进了数据验证中的性能和对跨工作表引用的支持。 EPPlus是一个用于管理Office Open XML电子表格的.NET库。该库的设计考虑到了开发人员,使任何了解Microsoft Excel或任何其他电子表格库的开发人员都可以轻松地使用API。EPPlus为Micros…...
2023/3/28 14:54:38 - eNSP 构建基本WLAN
配置项配置参数AP组 名称:hcia-group 应用模板:域管理模板hcia-domain、VAP模板hcia-vap 域管理模板 名称:hcia-domain 国家码:cn SSID模板 名称:hcia-ssid SSID名称:hcia-wlan 安全模板 名称:h…...
2023/3/28 14:52:16 - PHP外观模式(Facade Pattern)
外观模式(Facade Pattern)是什么? 外观模式是一种结构型模式,它提供了一个简单的接口,隐藏了系统的复杂性,为客户端提供了一个简单的入口点。这种类型的设计模式属于结构型模式,它为子系统的一…...
2023/3/28 14:51:32 - Studio One6更新覆盖升级中文版及功能介绍
Studio One是宿主软件界的一个后起之秀,推出的时间不久,但是受到了大量音乐制作人的推崇。原因在于其时尚好看的外观设计以及允许用户自定义设计界面和快捷键。对于新手学习编曲非常友好。在前不久更新的Studio One6版本中,Studio One新加入了…...
2023/3/28 14:49:55 - C语言计算机二级/C语言期末考试题库
空闲时间整理了一些题 目录 一、填空,共20题 (共计20分) 第1题 (1.0分) 第2题 (1.0分) 第3题 (1.0分) 第4题 (1.0分) 第5题 (1…...
2023/3/28 14:48:07 - WebpackVue-cliVue-router路由
Vue 1.计算属性 计算属性的重点突出在属性两个字上(属性是名词),首先它是个属性其次这个属性有计算的能力(计算是动词),这里的计算就是个函数;简单点说,它就是一个能够将计算结果缓存起来的属性(将行为转化成了静态的属性),仅此…...
2023/3/28 14:47:02 - 3dmax中将模型名称带入Arcgis字段(一)
效果 背景 做GIS项目中,有时候会用到GIS信息和模型相结合的情况,这时候通常会用到Arcgis软件和3dmax软件,而两个软件有时候又不能直接转换和传递参数,这时候可以通过需要通过3dmax软件中的脚本语言和CAD格式dwg来转换传递参数 步骤 1、3dmax中模型完成(准备数据) 2、…...
2023/3/28 14:44:31 - 【每日一题Day160】LC1092最短公共超序列 | 动态规划
最短公共超序列【LC1092】 给出两个字符串 str1 和 str2,返回同时以 str1 和 str2 作为子序列的最短字符串。如果答案不止一个,则可以返回满足条件的任意一个答案。 (如果从字符串 T 中删除一些字符(也可能不删除,并且…...
2023/3/28 14:44:19
最新文章
- 【Verilog语法013】verilog多维数组(多维矩阵)的写法
有两种表示方法:一种是verilog语法的多维数组,另一种是system verilog语法的多维数组。 这是verilog语法: reg [A1:A0] a [B1:B0] [C1:C0] [D1:D0] ; 引用顺序是:a[B][C][D][A], 定义的a 的左边只有位宽,一对方括号[…...
2023/3/28 15:42:00 - netstat命令参数和arp命令
Usage: netstat [-ral] [-tuwx] [-en] Display networking information -r Routing table -----------------------查看路由表 -a All sockets 所有套接字状态 -l Listening sockets …...
2023/3/28 15:41:49 - macOS Ventura 13.3 (22E252) 正式版发布,ISO、IPSW、PKG 下载
请访问原文链接:https://sysin.org/blog/macOS-Ventura/,查看最新版。原创作品,转载请保留出处。 2023 年 3 月 27 日 (北京时间 28 日凌晨),macOS Ventura 13.3 正式版发布,本更新包括全新表情…...
2023/3/28 15:41:12 - Java设计模式(六)—— 命令模式
命令模式定义如下:将一个请求封装为一个对象,从而使用户可用不用的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 适合命令模式情景如下: 程序需要在不同的时刻指定、排列和执行请求程序需要…...
2023/3/28 15:39:02 - 12代酷睿安装神器!34元让小白装机也不会戳弯针脚
12th CPU 扣件强度太高疑似会造成 CPU 上的金属盖 IHS 中央出现凹陷 虽然我已经在粉丝团已经用数颗全新的 CPU 告诉大家 IHS 从过去刚存在开始到现在,中间就一直存在凹陷公差 即便如此 ~ 原厂 CPU 扣件强度极高,但防板弯的设置强度不足仍然不争的事实 如…...
2023/3/28 15:34:27 - 【ChatGPT】GPT实现原理大解析——看完就知道什么叫颠覆
文章目录前言一、ChatGPT是什么?二、那么,如何计算下一个单词的概率?三, 什么是模型?四,如何制作能完成人类任务的模型五,神经网络总结前言 ChatGPT 能够自动生成类似于人类写作的文本…...
2023/3/28 15:34:09 - OTA(Over-the-air programming)是什么?
OTA(Over the air-programming)是什么? ‒ 是指将新软件,固件,设置,加密密钥更新无线发布到手机,机顶盒等设备的方式。 ‒ 对于固件而言,由于安装在诸如ROM,EPROM和flash memory等的…...
2023/3/28 15:32:53 - FastJson序列化时过滤字段(属性)的方法总结
FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法。 方法一、FastJson的注解 JSONField(serialize false)private String name; 最便捷&am…...
2023/3/28 15:32:21 - 相机单独标定的实现过程[autoware标定]、tmp文件的查看方式
安装了autoware1.13和calibration标定包,发现实现相机单独标定的过程较为坎坷,参考了一些博主的方法,发现下面的过程更加适合自己,做个笔记。 1安装标定箱(与calibration标定包的安装并不冲突) 标定工具箱…...
2023/3/28 15:31:55 - seata 使用
1 下载地址 Releases seata/seata GitHub 2 版本 seat 1.6.0 修改配置文件 applciation.yml server: port: 7091 spring: application: name: seata-server logging: config: classpath:logback-spring.xml file: path: ${user.home}/logs/seata e…...
2023/3/28 15:25:31 - 人大金仓赋能网络安全产业,筑牢数字经济发展安全底线
近日,由广东省网络空间安全协会与广东关键信息基础设施保护中心联合举办的网安联广东网络安全大会(首届)暨2023广东省网络空间安全协会年会圆满结束。作为广东省网络空间安全协会会员单位,人大金仓受邀参加,并围绕“国…...
2023/3/28 15:22:37 - Unity和GAN实现AI绘画五等分的新娘、国家队02(附源码)
UnityGAN实现AI绘画五等分的新娘、国家队02附源码写在前面源码演示视频部分界面展示使用教程敬请期待其他写在后面写在前面 博主喜欢二次元,想着在读研期间做点对自己有意义的事,因此选择了动漫人物生成方向(呜呜呜,太感谢导师理解和支持了)…...
2023/3/28 15:20:15 - 4. git 配置 Gitee 远端指定仓库并提交代码
1. 第一步:先创建一个远程仓库 点击创建后,会显示如下界面,箭头所指的地方就是目前创建的仓库的远程地址: 2. 第二步:配置SSH公钥 首先打开git bash,在命令行里输入以下命令: ssh-keygen -t…...
2023/3/28 15:16:33 - TextCNN文本分类
TextCNN 模型主要由一维卷积层和时序最大池化层构成,一维卷积层是高为 1 的二维卷积层,在每个通道上,卷积核与输入做互相关运算,并将通道之间的结果相加得到输出结果。 时序最大池化层对应一维全局最大池化层,特点是卷…...
2023/3/28 15:13:58 - 数据库系统-建模
文章目录一、建模思想1.2 ER1.2.1 实体1.2.2 属性1.2.3 联系1.3 ER的表示方法1.3.1 chen方法1.3.2 Crow’s foot方法二、工程化方法2.1 IDEFx概念2.1.1 实体2.1.2 联系三、数据建模&数据库设计3.1 总览3.1 需求分析3.2 概念数据库设计3.2.1 局部ER模型设计3.2.2 全局ER图设…...
2023/3/28 15:10:08 - Machine Learning-Ex2(吴恩达课后习题)About Logistic Regression
1. Logistic Regression1.1 Visualizing the dataData:学生两次测试的分数、是否被录取(0/1表示)plot.pyimport matplotlib.pyplot as plt # 数据图形化def Plot(data):# isin函数接收列表positive data[data.Admitted.isin([1])] # 正样本…...
2023/3/28 15:08:32 - 意大利FBA海运主要港口有哪些
意大利FBA海运主要港口有哪些?意大利是一个位于亚平宁半岛的欧洲国家,与亚得里亚海、爱奥尼亚海、第勒尼安海和利古里亚海接壤,它在欧洲、亚洲和北非有重要的海上贸易。这是一个受欢迎的旅游景点,靠近苏伊士运河和直布罗陀海峡&am…...
2023/3/28 15:07:05 - R语言计算多元积分
目录0引言一、包的载入与认识二、使用实例2.1 参数解析2.2 运行实例1:多元正态分布的积分2.3 运行实例2:二元函数积分三、总结与展望0引言 在R语言中我们经常使用integrate函数计算一元积分,例如:《R语言 【integrate】函数》1. …...
2023/3/28 15:05:05 - 解决git push报错fatal: Authentication failed for ‘https://github.com/xxx.git/‘
目录 问题现象 解决方式 问题现象 remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for informat…...
2023/3/28 15:01:43 - c++11 标准模板(STL)(std::unordered_multiset)(十二)
定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_multiset;(1)(C11 起)namespace pmr { …...
2023/3/28 15:00:58 - MySQL出现too many connections错误
MySQL出现too many connections报错 1、现象 navicat连接MySQL时报too many connections错误 2、原因 my.ini 中设定的并发连接数太少或者系统繁忙导致连接数被占满。 连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout 都有关。 wait_timeout 的值越大,连…...
2023/3/28 14:57:23 - 使用Netty,当然也要了解它的连接闲置处理
连接闲置网络连接的闲置指的是当前网络连接处于空闲状态,即没有正在进行的数据传输或通信活动。当我们的某个连接不再发送请求或者接收响应的时候,这个连接就开始处于闲置状态。网络连接的闲置时间越长,说明该连接越不活跃。此时,…...
2023/3/28 14:56:40 - EPPlus电子表格的.NET库Crack
EPPlus电子表格的.NET库Crack 改进了数据验证中的性能和对跨工作表引用的支持。 EPPlus是一个用于管理Office Open XML电子表格的.NET库。该库的设计考虑到了开发人员,使任何了解Microsoft Excel或任何其他电子表格库的开发人员都可以轻松地使用API。EPPlus为Micros…...
2023/3/28 14:54:38 - eNSP 构建基本WLAN
配置项配置参数AP组 名称:hcia-group 应用模板:域管理模板hcia-domain、VAP模板hcia-vap 域管理模板 名称:hcia-domain 国家码:cn SSID模板 名称:hcia-ssid SSID名称:hcia-wlan 安全模板 名称:h…...
2023/3/28 14:52:16 - PHP外观模式(Facade Pattern)
外观模式(Facade Pattern)是什么? 外观模式是一种结构型模式,它提供了一个简单的接口,隐藏了系统的复杂性,为客户端提供了一个简单的入口点。这种类型的设计模式属于结构型模式,它为子系统的一…...
2023/3/28 14:51:32 - Studio One6更新覆盖升级中文版及功能介绍
Studio One是宿主软件界的一个后起之秀,推出的时间不久,但是受到了大量音乐制作人的推崇。原因在于其时尚好看的外观设计以及允许用户自定义设计界面和快捷键。对于新手学习编曲非常友好。在前不久更新的Studio One6版本中,Studio One新加入了…...
2023/3/28 14:49:55 - C语言计算机二级/C语言期末考试题库
空闲时间整理了一些题 目录 一、填空,共20题 (共计20分) 第1题 (1.0分) 第2题 (1.0分) 第3题 (1.0分) 第4题 (1.0分) 第5题 (1…...
2023/3/28 14:48:07 - WebpackVue-cliVue-router路由
Vue 1.计算属性 计算属性的重点突出在属性两个字上(属性是名词),首先它是个属性其次这个属性有计算的能力(计算是动词),这里的计算就是个函数;简单点说,它就是一个能够将计算结果缓存起来的属性(将行为转化成了静态的属性),仅此…...
2023/3/28 14:47:02 - 3dmax中将模型名称带入Arcgis字段(一)
效果 背景 做GIS项目中,有时候会用到GIS信息和模型相结合的情况,这时候通常会用到Arcgis软件和3dmax软件,而两个软件有时候又不能直接转换和传递参数,这时候可以通过需要通过3dmax软件中的脚本语言和CAD格式dwg来转换传递参数 步骤 1、3dmax中模型完成(准备数据) 2、…...
2023/3/28 14:44:31 - 【每日一题Day160】LC1092最短公共超序列 | 动态规划
最短公共超序列【LC1092】 给出两个字符串 str1 和 str2,返回同时以 str1 和 str2 作为子序列的最短字符串。如果答案不止一个,则可以返回满足条件的任意一个答案。 (如果从字符串 T 中删除一些字符(也可能不删除,并且…...
2023/3/28 14:44:19