RedisMessageListenerContainer容器初始化

RedisMessageListenerContainer是Spring Data Redis提供的一个容器类,为Redis监听器提供异步处理能力,处理低级别消息、转换Redis的消息通道,它通常与MessageListenerAdapter和自定义的消息监听器一起使用。

一、RedisMessageListenerContainer容器类初始化
	private void initMessageListenerContainer() {this.messageListenerContainer = new RedisMessageListenerContainer();this.messageListenerContainer.setConnectionFactory(((RedisTemplate<?, ?>) redisOps).getConnectionFactory());this.messageListenerContainer.afterPropertiesSet();this.messageListenerContainer.start();}

org.springframework.data.redis.core.RedisKeyValueAdapter适配器类会在构造函数或afterPropertiesSet回调方法中调用initMessageListenerContainer初始化方法。

二、RedisKeyValueAdapter适配器类
	private static AbstractBeanDefinition createRedisKeyValueAdapter(RepositoryConfigurationSource configuration) {BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(RedisKeyValueAdapter.class) //.addConstructorArgReference(configuration.getRequiredAttribute("redisTemplateRef", String.class)) //.addConstructorArgReference(REDIS_CONVERTER_BEAN_NAME) //.addPropertyValue("enableKeyspaceEvents",configuration.getRequiredAttribute("enableKeyspaceEvents", EnableKeyspaceEvents.class)) //.addPropertyValue("keyspaceNotificationsConfigParameter",configuration.getAttribute("keyspaceNotificationsConfigParameter", String.class).orElse("")) //.addPropertyValue("shadowCopy", configuration.getRequiredAttribute("shadowCopy", ShadowCopy.class));configuration.getAttribute("messageListenerContainerRef").ifPresent(it -> builder.addPropertyReference("messageListenerContainer", it));return builder.getBeanDefinition();}

org.springframework.data.redis.repository.configuration.RedisRepositoryConfigurationExtension类会在registerBeansForRoot方法中将RedisKeyValueAdapter对象定义成AbstractBeanDefinition对象注册到BeanDefinitionRegistry中。

三、RedisRepositoryConfigurationExtension对象初始化
	@Overrideprotected RepositoryConfigurationExtension getRepositoryConfigurationExtension() {return new RedisRepositoryConfigurationExtension();}

RedisRepositoriesRegistrar类中定义类RedisRepositoryConfigurationExtension对象的实例化方法,并且被RedisRepositoriesRegistrar的抽象父类AbstractRepositoryConfigurationSourceSupport中的registerBeanDefinitions方法调用。

AbstractRepositoryConfigurationSourceSupport#registerBeanDefinitions方法:

@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry,BeanNameGenerator importBeanNameGenerator) {RepositoryConfigurationDelegate delegate = new RepositoryConfigurationDelegate(getConfigurationSource(registry, importBeanNameGenerator), this.resourceLoader, this.environment);delegate.registerRepositoriesIn(registry, getRepositoryConfigurationExtension());
}

上述registerBeanDefinitions方法是被ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsFromRegistrars方法所调用,此类是spring初始化bean及相关类的核心。

	private void loadBeanDefinitionsFromRegistrars(Map<ImportBeanDefinitionRegistrar, AnnotationMetadata> registrars) {registrars.forEach((registrar, metadata) ->registrar.registerBeanDefinitions(metadata, this.registry, this.importBeanNameGenerator));}
四、RedisMessageListenerContainer容器初始化相关默认值
class RedisRepositoriesRegistrar extends AbstractRepositoryConfigurationSourceSupport {@Overrideprotected Class<? extends Annotation> getAnnotation() {return EnableRedisRepositories.class;}@Overrideprotected Class<?> getConfiguration() {return EnableRedisRepositoriesConfiguration.class;}@Overrideprotected RepositoryConfigurationExtension getRepositoryConfigurationExtension() {return new RedisRepositoryConfigurationExtension();}@EnableRedisRepositoriesprivate static final class EnableRedisRepositoriesConfiguration {}}

RedisRepositoriesRegistrar类是RedisMessageListenerContainer监听器容器类的初始化起点类,会读取@EnableRedisRepositories注解的属性配置,如果项目中未显式使用此注解则读取默认值,如:redisTemplateRef属性默认引用别名为redisTemplate的模板类。

五、如何开启Spring Data Redis Repositories仓储
  • 方案一:
/**
* 通过在配置类上添加次注解
**/
@EnableRedisRepositories
  • 方案二:
/**
* 通过spring.data.redis.repositories.enabled配置开关
**/
@AutoConfiguration(after = RedisAutoConfiguration.class)
@ConditionalOnClass(EnableRedisRepositories.class)
@ConditionalOnBean(RedisConnectionFactory.class)
@ConditionalOnProperty(prefix = "spring.data.redis.repositories", name = "enabled", havingValue = "true",matchIfMissing = true)
@ConditionalOnMissingBean(RedisRepositoryFactoryBean.class)
@Import(RedisRepositoriesRegistrar.class)
public class RedisRepositoriesAutoConfiguration {}

开源SDK:https://github.com/mingyang66/spring-parent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】网络安全如何利用(行为分析)来确定可能表明内部威胁、APT 或零日攻击的可疑或异常事件。

网络安全如何利用&#xff08;行为分析&#xff09;来确定可能表明内部威胁、APT 或零日攻击的可疑或异常事件。 1. 行为分析的基本概念 2. 检测内部威胁 3. 检测高级持续性威胁 (APT) 4. 检测零日攻击 5. 实施行为分析的步骤 6. 行为分析的优势与挑战 7. 总结 &#x1…

(十七)Flink 容错机制

目录 分布式快照 Checkpoint Checkpoint 模式 Checkpoint 配置 非对齐 Checkpointing 状态存储 Savepoint 分配算子 ID Savepoint 操作 Checkpoint 与 Savepoint 区别 作业重启与故障恢复策略 重启策略 恢复策略 对于不间断 24 小时运行的程序来说,容错至关重要。…

在蓝桥云课ROS中快速搭建Arduino开发环境

普通方式 一步步慢悠悠的搭建和讲解需要5-6分钟&#xff1a; 如何在蓝桥云课ROS中搭建Arduino开发环境 视频时间&#xff1a;6分40秒 高效方式 如何高效率在蓝桥云课ROS中搭建Arduino开发环境 视频时间&#xff1a;1分45秒 配置和上传程序到开发板 上传程序又称为下载程序h…

html+css+js网页设计 婚庆网站8个页面

htmlcssjs网页设计 婚庆网站8个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…

打卡51天------图论(深搜/广搜应用题)

最近真的太忙了&#xff0c;没时间刷题&#xff0c;白天工作&#xff0c;我在church的Choir事工还不想停止&#xff0c;需要我在工作、生活、church做一个平衡&#xff0c;周六慢慢补上吧&#xff0c;交托给上Di。 一、岛屿数量-深搜 注意深搜的两种写法&#xff0c;熟练掌握这…

C#骑砍逻辑类Mod制作详细解说

前言&#xff1a; 最近在研究骑砍的mod&#xff0c;主要是想修改其中的逻辑部分&#xff0c;因此有了这篇帖子。 一&#xff0c;文件夹与XML配置 在Modules创建一个新文件夹&#xff0c;文件夹名称随意&#xff0c;不影响实际的读取。 文件夹下面的位置需要固定&#xff0c;因…

八股总结-----C++、数据结构、算法

1.内存基础 11.内存分区 代码区&#xff1a;存储可执行代码&#xff08;程序指令&#xff09;。 全局区&#xff1a;存储全局变量和静态变量&#xff08;已初始化和未初始化&#xff09;。 堆区&#xff1a;用于动态内存分配&#xff0c;由程序员管理。 栈区&#xff1a;存…

python:reportlab 生成PDF文件,生成基因图谱

reportLab是 python的一个第三方库&#xff0c;它能够用来生成PDF文件。这个库提供了一系列的工具&#xff0c;允许用户从简单的文档到复杂的多列布局进行PDF的创建和编辑。 使用 reportLab&#xff0c;你可以执行以下功能&#xff1a; 创建文本块、图片、图表等元素。 利用绘…

JS中【浅克隆】和【深克隆】方法解读

在JavaScript中&#xff0c;“克隆”指的是创建一个对象或数组的副本。克隆可以分为浅克隆和深克隆两种方式。了解这两种克隆的差异对编程非常重要。 浅克隆&#xff08;Shallow Clone&#xff09; 浅克隆会复制对象或数组的第一层属性&#xff0c;但对于嵌套的对象或数组&am…

如何通过rsync+sersync 实现同步备份

该文档是在很早之前写的&#xff0c;一直存在草稿箱中&#xff0c;最近在整理其它学习资料时发现还没有发布&#xff0c;内容和方法有可能和现在的操作系统版本有些不符合了&#xff0c;但处理思路没有变化&#xff0c;大家可以根据最新版本要求&#xff0c;参照该文档进行配置…

JVM调优原理

文章目录 引言I 调整JVM的默认堆内存配置1.1 java命令启动jar包时配置JVM 的内存参数1.2 基于Tomcat服务器部署的java应用,配置JVM 的内存参数II JVM GC 调优基本概念: 应用程序的响应时间(RT)和吞吐量(QPS)JVM调优原理调优思路调优方法JVM调优技巧建议引言 内存参数:ht…

南阳施工企业资质续期成本详解与节省策略

南阳施工企业资质续期费用涉及多个方面&#xff0c;包括官方收取的费用、咨询与代办费用、材料准备与审核费用等。以下是对这些费用的详细解析以及相应的节省方法&#xff1a; 一、费用详述 1. 官方收取的费用 延期申请费&#xff1a;这是办理资质续期时必须缴纳的费用&…

闲置物品|基于SprinBoot+vue的校园闲置物品交易平台(源码+数据库+文档)

校园闲置物品交易平台 目录 基于SprinBootvue的校园闲置物品交易平台 一、前言 二、系统设计 三、系统功能设计 5.1系统功能实现 5.2管理员模块实现 5.3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xf…

项目:基于TCP的文件传输系统

项目介绍: 模拟FTP原理&#xff1a;客户端连接服务器后&#xff0c;向服务器发送一个文件。文件名可以通过参数指定&#xff0c;服务器端接收客户端传来的文件&#xff08;文件名随意&#xff09;&#xff0c;如果文件不存在自动创建文件&#xff0c;如果文件存在&#xff0c;…

PsConvertToGuiThread函数调用前传

PsConvertToGuiThread函数调用前传 第一部分&#xff1a;位置 chchenghaodeiMac base % grep "Kss_ErrorHandler" -nr ./ .//ntos/ke/i386/trap.asm:1026:Kss_ErrorHandler: .//ntos/ke/i386/trap.asm:1220: jae Kss_ErrorHandler ; if ae, try…

matlab 相位解缠

目录 一、功能概述1、相位解缠2、主要函数二、代码实现1、螺旋线的正确相位角2、使用不同阈值平移相位角3、将相移应用于矩阵三、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、功能概述 1、相位解缠 对…

FPGA实现多功能SDI视频采集卡,基于GTX+RIFFA架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Bloc…

C#面:ASP.NET MVC 中还有哪些注释属性用来验证?

在 ASP.NET MVC 中&#xff0c;除了常见的数据注解属性&#xff08;如Required、StringLength等&#xff09;&#xff0c;还有一些其他的注解属性用来验证数据。以下是一些常用的注解属性&#xff1a; Range&#xff1a;用于验证数字类型的属性值是否在指定的范围内。 [Range(…

中文乱码解决方案

解决程序中的中文乱码问题通常涉及到几个关键点&#xff1a;字符编码的设置、环境变量的配置以及程序内部处理方式。这里提供一些常见的解决方案&#xff1a; 1. 设置正确的输入输出流编码 如果你的应用程序是在读取或写入文件时出现乱码&#xff0c;确保设置了正确的文件编码…

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(XGBoost分类器)

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序&#xff08;XGBoost分类器&#xff09; 文章目录 一、基本原理鲸鱼智能优化特征选择流程 二、实验结果三、核心代码四、代码获取五、总结 智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序…