看到canal源码的时候发现了好多这样的写法
<bean id="eventParser" class="com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser">
<property name="destination" value="${canal.instance.destination}" />
<property name="slaveId" value="${canal.instance.mysql.slaveId:1234}" />
<!-- 心跳配置 -->
<property name="detectingEnable" value="${canal.instance.detecting.enable:false}" />
<property name="detectingSQL" value="${canal.instance.detecting.sql}" />
<property name="detectingIntervalInSeconds" value="${canal.instance.detecting.interval.time:5}" />
<property name="haController">
<bean class="com.alibaba.otter.canal.parse.ha.HeartBeatHAController">
<property name="detectingRetryTimes" value="${canal.instance.detecting.retry.threshold:3}" />
<property name="switchEnable" value="${canal.instance.detecting.heartbeatHaEnable:false}" />
</bean>
</property>
property的属性${canal.instance.mysql.slaveId:1234} 取配置文件key的时候带了:后面跟了一个值 后来才发现这是对spring placeholder 设置默认值的一种扩展。
/**
* 扩展Spring的
* {@linkplain org.springframework.beans.factory.config.PropertyPlaceholderConfigurer}
* ,增加默认值的功能。 例如:${placeholder:defaultValue},假如placeholder的值不存在,则默认取得
* defaultValue。
* @author jianghang 2013-1-24 下午03:37:56
* @version 1.0.0
* */
看一下类图
PropertyPlaceholderConfigurer类图这里只要实现了InitializingBean的afterPropertiesSet方法 和 ResourceLoaderAware 的setResourceLoader方法将资源的路径解析出来,然后加载资源 。重写了 PropertyPlaceholderConfigurer 的resolvePlaceholder 方法,先解析成DefaultablePlaceholder,然后发现取不到一个属性的时候将默认值赋给该属性,其中默认值是冒号后面的值。DefaultablePlaceholder 是新定义的内部类。
贴出主要实现的代码
@Override
protected String resolvePlaceholder(String placeholder, Properties props, int systemPropertiesMode) {
DefaultablePlaceholder dp = new DefaultablePlaceholder(placeholder);
String value = super.resolvePlaceholder(dp.placeholder, props, systemPropertiesMode);
if (value == null) {
value = dp.defaultValue;
}
return trimToEmpty(value);
}
private static class DefaultablePlaceholder {
private final String defaultValue;
private final String placeholder;
public DefaultablePlaceholder(String placeholder){
int commaIndex = placeholder.indexOf(":");
String defaultValue = null;
if (commaIndex >= 0) {
defaultValue = trimToEmpty(placeholder.substring(commaIndex + 1));
placeholder = trimToEmpty(placeholder.substring(0, commaIndex));
}
this.placeholder = placeholder;
this.defaultValue = defaultValue;
}
}
原文链接:https://www.jianshu.com/p/6f5a9a02b2d2
相关推荐
海康H304NAS 刷机飞牛
本文旨在分享如何将闲置的海康威视H304 NAS刷入飞牛NAS系统,并利用iStoreOS作为安装媒介。之前因为使用极空间NAS,这台H304闲置已久。最近尝试了飞牛NAS,在虚拟机上安装后挂载极空间的电影资源,体验不错,于是决定重新折腾这台H304。我个人喜欢尝试新系统,之前经常更新H304的固件,但设备总在使用一两年后出现故障,需要联系技术清理日志才能恢复。最后一次设备“变砖”后,连技术人员也联系不上了,自己尝试修复未果,设备就此闲置两三年。
Spring占位符Placeholder的实现原理
占位符Placeholder的使用 xml中的配置: <?xml version="1.0" encoding="utf-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/contex
SSD性能测试进阶:用fio的io_uring引擎榨干你的NVMe硬盘
本文深入探讨了如何利用fio的io_uring引擎对NVMe SSD进行深度性能测试。通过对比传统libaio引擎,详解了io_uring低开销、高并发的优势。文章提供了从测试矩阵设计、队列深度分析到写入放大观察和尾延迟可视化的完整进阶方法,并附有实战案例与脚本,旨在帮助用户科学压榨NVMe硬盘的极限性能,获取更真实的评估数据。
Spring中property-placeholder的使用与解析
Spring中property-placeholder的使用与解析 我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中. 代码分析的时候,涉及的知识点概要: NamespaceHandler 解析xml配置文件中的自定义命名空间 ContextNamespaceHandler 上下文相关的解析器,这边定义了具体如何解析property-placehold...
APM水下机器人实战:从零搭建高精度自主航行系统
本文详细介绍了如何基于开源APM飞控及其水下分支ArduSub,从零搭建高精度自主水下航行器。核心在于集成双天线RTK模块实现厘米级定位与精确航向,并配合MAVROS与ROS构建自主控制系统。文章涵盖了硬件选型、软件配置、自主逻辑开发及水池调试的全流程实战经验,为水下机器人爱好者与研究者提供了一套完整的自主航行系统解决方案。
Clawdbot安装教程:从零开始到接入飞书
这几天,Clawdbot把整个科技圈都刷屏了。就是这个胖逼小龙虾🦞。不过现在改名叫Moltbot了。原因很简单:被Anthropic告了。Anthropic觉得Clawdbot这名字太像Claude Code的延伸产品,要求改名。真的,Anthropic你这家伙…更离谱的是,因为Clawdbot太火,Mac Mini都被抢断货了。无数人为了用它,疯狂买Mac Mini。我刚打开美团外卖,发现居然没货了???
spring 配置文件属性设置默认值以及读取环境变量值
在 Spring 中为 javabean 注入属性文件中的属性值一般人都知道的,可以通过 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 引入一个属性文件,然后给 bean 指定属性的时候就可以用 ${jdbc.url} 方式赋值了。比如在 Spring 中是这样的配置: <bean id="da...
YOLOv8改进 | Conv篇:基于FasterBlock与C2f结构的二次创新,参数量下降70万【附保姆级代码】
通过引入FasterBlock二次创新C2f结构,我们成功地对YOLOv8模型进行了优化,显著降低了其参数量,并提升了推理速度,而精度保持不变甚至有所提升。该模型在多个实际应用场景中展现出了优异的性能,尤其是在嵌入式设备、移动端和自动驾驶等领域,具有广泛的应用潜力。未来的研究将进一步优化模型结构,探索更多的应用场景,为目标检测技术的发展做出贡献。
placeholder属性
使用placeholder属性来提示输入框中需要输入的内容 效果图: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>placeholder属性</title> </head> <body> <form action="#" method="get"> 请输入邮政编码: <input type="
python实现马丁策略(股市) (附完整源码)
python实现马丁策略(股市) (附完整源码)
用「OpenClaw」打造新媒体运营神器:小红书/公众号全自动选题→创作→排版→发布全流程
对于新媒体运营的从业者来说,AI不是要取代运营人员,而是把他们从繁琐的重复劳动中解放出来,专注于更核心的内容策略、用户运营、品牌建设,这才是AI在传统行业落地的真正价值。这是最终输出可发布内容的核心智能体,我们通过「OpenClaw」的Prompt工程,结合不同平台的排版规范,实现了一键生成符合要求的排版,完全替代人工重复劳动。这套系统的落地,不是技术的炫技,而是真正用AI解决了新媒体运营的核心痛点:用自动化替代重复的人工劳动,用数据决策替代经验主义,用全闭环执行替代纸上谈兵的建议。
HTML5----placeholder属性
placeholder属性能够让你在文本框里显示提示信息,一旦你在文本框里输入了什么信息,提示信息就会隐藏。
光流结合深度学习实现物体运动方向判断
光流计算:提取每一帧视频中像素的运动信息,生成光流图。光流特征提取:通过特定的预处理,将光流图转换为深度学习模型可用的输入格式。深度学习模型设计:构建一个卷积神经网络(CNN)或其他适合的深度学习架构,利用光流特征进行运动方向分类。模型训练与推理:对网络进行训练并使用训练好的模型判断运动方向。光流与深度学习结合的运动方向判断技术在多个领域具有广泛的应用前景。通过光流提取像素级动态信息,并利用深度学习模型学习高层次特征,可以实现高精度的运动检测与方向判断。
给Spring的placeholder设置默认值
问题:使用Spring时,可以方便地通过placeholder的形式${key}将key对应的properities定义value,注入到Bean中。但是如果在properities文件中,没有对key定义,默认情况下Spring启动创建Bean时会报找到key的错误。 解决办法:一是将对应的key=value写入properies文件中,value可以为空。另外一种办法是,给placehold...
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
应用中有多个Spring Property PlaceHolder导致@Value只能获取到默认值
背景 工作中负责的一套计费系统需要开发一个新通知功能,在扣费等事件触发后发送MQ,然后消费MQ发送邮件或短信通知给客户。因为有多套环境,测试时需要知道是从哪套环境发出的邮件,又不想维护多套通知模板,因此就打算在各环境的properties中声明不同的title前缀,实现类似[DEV]您的xx月账单、[TEST]您的xx月账单的效果,但是这个前缀需要在生产环境中去掉,因此我想到用Sprin...
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
java placeholder_java从入门到精通之Spring中property-placeholder的使用与解析详解
本文主要向大家介绍了java从入门到精通的Spring中property-placeholder的使用与解析详解,通过具体的实例让大家了解,希望大家在java从入门到精通的路上能走得更远。我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中.代码分析的时候,涉及的知识点概要:1.NamespaceHandler 解析xml配置文件中的自定义命名空间2.Con...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
property- placeholder
** Spring中property-placeholder的使用与解析 ** Spring中property-placeholder的使用与解析# 我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中. 代码分析的时候,涉及的知识点概要: NamespaceHandler 解析xml配置文件中的自定义命名空间 ContextNamespaceHandler 上下文相关的解析器,这边定义了具体如何解析property-placeholder的解析器 BeanDefin
Could not resolve placeholder ‘name‘ in value “${name}“报错解决
今天配置动态拉取Nacos Config,写完NacosController时启动Spring Cloud时报错: Could not resolve placeholder 'name' in value "${name}" 第一次尝试解决: 百度之后查询到以下原因: springboot启动时会检索 @Value 对应配置文件中的key,当该key不存在时就会报:Caused by: java.lang.IllegalArgumentException: Could not reso..
context:property-placeholder 标签解析
context:property-placeholder location="classpath*:application.properties"/> 对应的handler http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler publ
Spring中 <context:property-placeholder 的使用与解析 .properties 配置文件的加载
转: Spring中property-placeholder的使用与解析 Spring中property-placeholder的使用与解析 我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中. 代码分析的时候,涉及的知识点概要: NamespaceHandler 解析xml配置文件中的自定义命名空间 ContextN...
springcloud 项目启动报错@Value引入问题处理java.lang.IllegalArgumentException: Could not resolve placeholder...
问题描述: Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'wxopen.appid' in value "${wxopen.appid}" 我的Config配置类: application.yml:(此处我是配置在nacos里面了) 由于是部署在微服务项目中,单个的服务可以正常启动,但是在启动另外一个服务(这个服务调用了上面的服务)就会启动报错 springboot启动时会检索 @
Spring中property-placeholder的使用与解析详解
我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中. 代码分析的时候,涉及的知识点概要: 1.NamespaceHandler 解析xml配置文件中的自定义命名空间 2.ContextNamespaceHandler 上下文相关的解析器,这边定义了具体如何解析property-placeholder的解析器 3.BeanDefinitionParser...
java placeholder_Spring中property-placeholder的使用与解析详解
我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中.代码分析的时候,涉及的知识点概要:1.NamespaceHandler 解析xml配置文件中的自定义命名空间2.ContextNamespaceHandler 上下文相关的解析器,这边定义了具体如何解析property-placeholder的解析器3.BeanDefinitionParser 解析bea...

2743



被折叠的 条评论
为什么被折叠?



