分享一下upupor网站新增内容时未刷新到Lucene中的排查过程和解决方案
353 ·
0 ·
2022-04-12 01:06:41
最新编辑原因:

背景

在开发环境一切正常,一旦部署到生产就失效

困扰点

在开发环境完全无法复现。所以一开始都是尝试在修改,反复部署,都没有解决线上的问题。后面使用java -jar的运行方式在本机执行模拟线上启动方式,在本地复现。
现在可以在本机复现了,那么就在本机边改边测试吧

排查方向

  1. 文章还未提交拿不到具体的资源,就执行了刷Lucene操作

细节

一开始按照1的猜想去修改代码,异步事件使用事务事件切实提交后事件,发现没有用。随后,添加日志,发现日志也没有打印。所以,得知根本就没有触发。
enter image description here
对应到代码是a步骤不满足。那么a步骤不满足就是b没有获取到值。现在问题到了,为什么没有获取到值呢?

没有获取到值说明还没有资源,也就是资源还没有生成就去刷Lucene?

解决方法

既然是没有获取到资源,那就先让资源生成,所以使用Order来指定顺序。指定完顺序后,问题解决
github提交: d75683a617f714294f30950bd0d311804ab8ff6d

遗留问题,为什么开发环境不指定顺序却可以拿到Id?

排查后发现是版本问题!!!
生产spring-aop使用的是5.2.2.RELEASE
本地使用的是4.1.4.RELEASE
查阅资料后总结为,从Spring5.2.x开始,Spring AOP不再严格按照AspectJ定义的规则来执行advice,而是根据其类型按照从高到低的优先级进行执行:@Around,@Before ,@After,@AfterReturning,@AfterThrowing

因为未指定顺序,所以比较切面类的字符串
enter image description here
可以得知,是ControllerAspectAdvice先执行,然后根据下图的执行顺序可以发现确实拿不到资源
enter image description here

至此问题全部解决


本作品系原创,采用《署名-非商业性使用-禁止演绎4.0 国际》许可协议.转载请说明出处
本文链接:https://www.upupor.com/u/22041116256606510080 复制

无内容

推荐阅读
暗淡蓝点 · 响应时间: 68ms · 版本:2022-06-22T08:41:16.737 · 备案号: 皖ICP备17015935号-2 · upupor.com©2022 · 项目始于2019