spring 設置事務回滾報: org.springframework.transaction.NoTransactionException: No transaction aspec

原文鏈接:https://blog.csdn.net/xuhaogang3/article/details/82190026

異常: 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託管

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章