一:資料庫引擎不支援事務
以 mysql 為例,其 myisam 引擎是不支援事務操作的,innodb 才是支援事務的引擎
從 mysql 5.5.5 開始的預設儲存引擎是:innodb,之前預設的都是:myisam
二:沒有被 spring 管理
如果此時把@service
註解注釋掉,這個類就不會被載入成乙個 bean,那這個類就不會被 spring 管理了,事務自然就失效了
// @service
public class orderserviceimpl implements orderservice
}
三:方法不是 public 的
@transactional
只能用於 public 的方法上,否則事務不會失效,如果要用在非 public 方法上,可以開啟aspectj
**模式。
四:自身呼叫問題
失效案例:非事務方法呼叫直接呼叫事務方法
@service
public class orderserviceimpl implements orderservice
@transactional
public void updateorder(order order)
}
五:資料來源沒有配置事務管理器
@bean
public platformtransactionmanager transactionmanager(datasource datasource)
六:不支援事務(propagation.not_supported:表示不以事務執行)
@service
public class orderserviceimpl implements orderservice
@transactional(propagation = propagation.not_supported)
public void updateorder(order order)
}
七:異常被吃了,把異常吃了,然後又不丟擲來
失效案例:
@service
public class orderserviceimpl implements orderservice catch
}}
八:異常型別錯誤,直接拋exception是不會生效的,需要丟擲runtimeexception異常才行
失效案例:
@service
public class orderserviceimpl implements orderservice catch
}}
Spring事務失效的八大原因,吊打面試官
1 資料庫引擎不支援事務 2 沒有被 spring 管理 3 方法不是 public 的 4 自身呼叫問題 5 資料來源沒有配置事務管理器 6 不支援事務 7 異常被吃了 8 異常型別錯誤 總結這裡以 mysql 為例,其 myisam 引擎是不支援事務操作的,innodb 才是支援事務的引擎,一般...
Spring事務失效的 8 大原因
用 spring 的 transactional註解控制事務有哪些不生效的場景?1 資料庫引擎不支援事務 這裡以 mysql 為例,其 myisam 引擎是不支援事務操作的,innodb 才是支援事務的引擎,一般要支援事務都會使用 innodb。根據 mysql 的官方文件 從 mysql 5.5....
Spring事務失效的 8 大原因
1 資料庫引擎不支援事務 這裡以 mysql 為例,其 myisam 引擎是不支援事務操作的,innodb 才是支援事務的引擎,一般要支援事務都會使用 innodb。根據 mysql 的官方文件 從 mysql 5.5.5 開始的預設儲存引擎是 innodb,之前預設的都是 myisam,所以這點要...