spring 设置事务回滚报: org.springframework.transaction.NoTransactionException: No transaction aspec

异常: org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope

执行的sql:

UPDATE sys_config SET remark='1.准备升级 2. 升级成功 3. 升级失败 4. 升级中' WHERE c_key='update_statue';

ALTER TABLE  `sys_config`   
  ADD COLUMN `test` VARCHAR(50) NULL COMMENT 'test' AFTER `remark`;

环境: 类或方法上注解了 @Transactional(rollbackFor=Exception.class) , catch 异常处捕获异常时执行

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚

参考: https://blog.csdn.net/xuhaogang3/article/details/82190026

问题分析:

1. 发现该类是 通过new Bean() 的构造方法的方式构造的,并没有托管给spring 所以 该类无法执行事务,

2. 或者多线程类 仅仅用@Component 组件注释,并没有指明范围 @Scope ,因为spring 默认加载类都是单例模式,所以在加载 多线程类时就算加上组件 注解,但是没有指定范围,也不会加载到应用上下文中, 需要同时在类中注释 @Component 和@Scope("prototype") ,如果 被cglib 代理还要在类上加上@EnableAspectJAutoProxy(proxyTargetClass=true) // 设置允许使用 代理类

3. 如果还有其他情况,先看看类有没有交给spring托管

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值