一、该问题的重现步骤是什么?
SpringUtil.publishEvent 发布事件, onApplicationEvent 订阅后续执行的代码mysql事务失效,且 tenantId 不会拼接到sql中。但是通过 AuthUtil.getTenantId 可以获取到租户Id
二、你期待的结果是什么?实际看到的又是什么?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
4.2.0
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
我找到原因了, SpringUtil 方法中把异常吃掉了, 这个需要怎么修复? 继续抛出来
public static void publishEvent(ApplicationEvent event) { if (context == null) { return; } try { context.publishEvent(event); } catch (Exception ex) { log.error(ex.getMessage()); } }
对外抛异常试试
{ .publishEvent(event); } (Exception ex) { .error(ex.getMessage()); ex; }
{ .publishEvent(event); //} (Exception ex) { // .error(ex.getMessage()); //}
这两种我测试了,都可以。 你们看一下有其他合适的方法吗? 就这个 log.error 要不要打印。看截图似乎log.error 是多余了
{ .publishEvent(event); } (Exception ex) { .error(ex.getMessage()); ex; }
或
// try {
context.publishEvent(event);
// } catch (Exception ex) {
// log.error(ex.getMessage());
// }
都可以
我截图了,两次发出来内容都变日志了。不知道啥原因
改成这样看看能不能正常抛异常并且回滚
/**
* 发布事件
*
* @param event 事件
*/
@SneakyThrows
public static void publishEvent(ApplicationEvent event) {
if (context == null) {
return;
}
context.publishEvent(event);
}
扫一扫访问 Blade技术社区 移动端