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

妖精的绣舞 提交于 2019-12-02 06:03:44

异常: 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托管

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!