a58ab1928ecabdf9b55072caa1883d091d9d1695
背景:
- 原先 Alarm / Keepalive / Catalog 三个业务 Handler 自带 @Scheduled,
@Scheduled 会让 Spring 对业务类生成 CGLIB 代理,
与 @EventListener / @Async 等场景叠加时容易出现"找不到方法"/
重复包装等怪异行为。
- CatalogResponseMessageHandler.executeTaskQueue 上标 @Transactional
会导致空队列 50ms 触发一次空事务,浪费连接池;与此同时
this.saveData(...) 是自调用,saveData 上的 @Transactional
又根本不生效,事务语义双重翻车。
本次改动:
- 新增 CatalogResponseMessageQueueScheduler 无接口 @Component,
@Scheduled(fixedDelay=50) 驱动业务 Handler 的 executeTaskQueue。
- Alarm / Keepalive 两个 QueueScheduler 补 @ConditionalOnProperty
(video.sip-queue.enabled, matchIfMissing=true),三个调度器统一
开关;注释对齐,标明关闭后消息会在内存堆积、需运维兜底。
- CatalogResponseMessageHandler:
· 去掉 executeTaskQueue 上的 @Scheduled + @Transactional,
入口处 taskQueue.isEmpty() 直接 return,不再开空事务;
· @Autowired @Lazy 注入自身代理 self,把 this.saveData(...)
改成 self.saveData(...),让 saveData 上的 @Transactional
真正生效(MyBatis 落库 + 区域/分组批写回到同一事务)。
Description
Languages
Java
80.2%
PLpgSQL
12.7%
TSQL
6.7%
Python
0.2%