日志监控功能,想业务数据回滚,aop中日志记录不回滚,要怎么弄?

baidu_24587893 2019-02-15 03:56:44
现要弄一个日志监控的功能,碰到一个问题,请各位大神帮忙看下,不胜感激。
现定义了一自定义注解@LogRecord,在标注该注解的方法上进行切面处理,该切面就是记录日志详情写到数据库中。
现一主service由事务控制,其下子业务标注了以上注解,在记录日志明细时,若有一步出错回滚,则业务数据及日志数据均回滚了,现在想业务数据回滚,aop中日志记录不回滚,要怎么弄?
部分代码如下:
主service:

切面aop:
...全文
986 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_24587893 2019-04-23
  • 打赏
  • 举报
回复
引用 7 楼 纵马饮白虹 的回复:
使用多数据源

用多数据源了,已经异步处理了
baidu_24587893 2019-04-23
  • 打赏
  • 举报
回复
引用 6 楼 maradona1984 的回复:
修改你spring事务传播机制就行,开启一个新的事务,你说aop中Around方法上不行,不太理解这段话,或者注解你可以写在具体的方法上

当然最好的方法是,异步处理(mq,线程池,kafka等等),这才是合理解决方案,异步可以尽可能小的影响正常业务流程

嗯,异步处理了
纵马饮白虹 2019-02-22
  • 打赏
  • 举报
回复
使用多数据源
maradona1984 2019-02-21
  • 打赏
  • 举报
回复
修改你spring事务传播机制就行,开启一个新的事务,你说aop中Around方法上不行,不太理解这段话,或者注解你可以写在具体的方法上

当然最好的方法是,异步处理(mq,线程池,kafka等等),这才是合理解决方案,异步可以尽可能小的影响正常业务流程
baidu_24587893 2019-02-21
  • 打赏
  • 举报
回复
引用 2 楼 sjlzcj 的回复:
可以试试将写log入库的方法也加上 @Transactional 和你当前切的方法 都使用 REQUIRED 事物传递级别 这个是默认的级别

当然你要是能确定你切的方法先打开事物的话也可以在切的方法上使用 REQUIRED 传递级别 写log的方法上加上 PROPAGATION_MANDATORY 传递级别


我没验证过,你可以试试

aop中Around方法上不行
baidu_24587893 2019-02-21
  • 打赏
  • 举报
回复
引用 3 楼 dainifei2010 的回复:
在日志中开启一个新的事物即可,本人在生产上已经稳定运行几个月了。事物的级别有多个,自己看一下

在aop相应方法上加了@Transactional(propagation = Propagation.NOT_SUPPORTED)或@Transactional(propagation = Propagation.REQUIRES_NEW)都不行,你那边是怎么搞的?
dainifei2010 2019-02-18
  • 打赏
  • 举报
回复
在日志中开启一个新的事物即可,本人在生产上已经稳定运行几个月了。事物的级别有多个,自己看一下
sjlzcj 2019-02-18
  • 打赏
  • 举报
回复
可以试试将写log入库的方法也加上 @Transactional 和你当前切的方法 都使用 REQUIRED 事物传递级别 这个是默认的级别 当然你要是能确定你切的方法先打开事物的话也可以在切的方法上使用 REQUIRED 传递级别 写log的方法上加上 PROPAGATION_MANDATORY 传递级别 我没验证过,你可以试试
tianfang 2019-02-18
  • 打赏
  • 举报
回复
做不到 回滚是数据库驱动的,返回给应用的是错误信息,不是你的业务日志,在系统错误日志中。你只能分析包含回滚错误信息的日志,找到处理逻辑日志,标记其已回滚

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧