@postconstruct VS @eventListener 以及 dubbo服务暴露(1)

本文探讨了在Spring应用中进行初始化操作的不同方式,包括ApplicationRunner、CommandLineRunner接口,@PostConstruct注解以及Spring事件机制中的ContextRefreshedEvent。分析了这些方法的调用时机和应用场景,特别强调了如何利用ContextRefreshedEvent事件进行初始化操作,以解决服务启动时的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看标题,你可能并太可能知道我想要说什么,但是肯定和这3个关键字有关系。
这一切都要从线上一个服务的报错开始:

背景

线上报错表现:服务启动时候一个定时任务卡住了,进而导致服务起不来。
当时这个足足卡了有5分钟多,可见并不是任务执行时间久(平时也就最多30s)

分析

连忙相办法找运维同学把线上该服务的堆栈信息拿到手,发现有线程blocked,这个线程就是加载定时任务,去redis里面get数据的。

在这里插入图片描述
如上图可见,是最后获取spring bean的时候死锁了。

spring 初始化相关点
ApplicationRunner与CommandLineRunner接口

如果需要在SpringApplication启动时执行一些特殊的代码,你可以实现ApplicationRunner或CommandLineRunner接口,这两个接口工作方式相同,都只提供单一的run方法,而且该方法仅在SpringApplication.run(…)完成之前调用,更准确的说是在构造SpringApplication实例完成之后调用run()的时候,具体分析见后文,所以这里将他们分为一类。
构造一个类实现Applicat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Think_Higher

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值