spring事務失效的八大原因

2021-10-01 23:35:27 字數 1691 閱讀 3105

一:資料庫引擎不支援事務

以 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,所以這點要...