1、spring的事務注解@Transactional只能放在public修飾的方法上才起作用,如果放在其他非public(private,protected)方法上,雖然不報錯,但是事務不起作用
2、如果采用spring+spring mvc,則context:component-scan重復掃描問題可能會引起事務失敗。
如果spring和mvc的配置文件中都掃描了service層,那么事務就會失效。
原因:因為按照spring配置文件的加載順序來講,先加載springmvc配置文件,再加載spring配置文件,我們的事物一般都在srping配置文件中進行配置,如果此時在加載srpingMVC配置文件的時候,把servlce也給注冊了,但是此時事物還沒加載,也就導致后面的事物無法成功注入到service中。所以把對service的掃描放在spring配置文件中或是其他配置文件中。
3、如使用mysql且引擎是MyISAM,則事務會不起作用,原因是MyISAM不支持事務,可以改成InnoDB引擎
4、 @Transactional 注解開啟配置,必須放到listener里加載,如果放到DispatcherServlet的配置里,事務也是不起作用的。
如果spring和mvc的配置文件中都掃描了service層,那么事務就會失效。
原因:因為按照spring配置文件的加載順序來講,先加載springmvc配置文件,再加載spring配置文件,我們的事物一般都在srping配置文件中進行配置,如果此時在加載srpingMVC配置文件的時候,把servlce也給注冊了,但是此時事物還沒加載,也就導致后面的事物無法成功注入到service中。所以把對service的掃描放在spring配置文件中或是其他配置文件中。

5、Spring團隊建議在具體的類(或類的方法)上使用 @Transactional 注解,而不要使用在類所要實現的任何接口上。在接口上使用 @Transactional 注解,只能當你設置了基於接口的代理時它才生效。因為注解是 不能繼承 的,這就意味着如果正在使用基於類的代理時,那么事務的設置將不能被基於類的代理所識別,而且對象也將不會被事務代理所包裝。
6、在業務代碼中如果拋出RuntimeException異常,事務回滾;但是拋出Exception,事務不回滾;
7、如果在加有事務的方法內,使用了try...catch..語句塊對異常進行了捕獲,而catch語句塊沒有throw new RuntimeExecption異常,事務也不會回滾。
8、在類A里面有方法a 和方法b, 然后方法b上面用 @Transactional加了方法級別的事務,在方法a里面 調用了方法b, 方法b里面的事務不會生效。原因是在同一個類之中,方法互相調用,切面無效 ,而不僅僅是事務。這里事務之所以無效,是因為spring的事務是通過aop實現的。
原文鏈接:https://blog.csdn.net/dhklsl/article/details/88354216?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
原文鏈接:https://blog.csdn.net/dhklsl/article/details/88354216?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task