在Spring中,如果注解式事務(wù)失效,可能有以下幾個原因:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven />
@Transactional
public void doSomething() {
// 事務(wù)操作
}
方法調(diào)用被AOP代理繞過:如果在同一個類中的一個方法直接調(diào)用另一個方法,而沒有通過代理來調(diào)用,那么事務(wù)將無法生效。這是因為Spring的事務(wù)是基于AOP代理實現(xiàn)的??梢酝ㄟ^將方法調(diào)用重構(gòu)為通過代理來調(diào)用來解決這個問題。
異常被捕獲并不再拋出:在Spring的事務(wù)管理中,只有在方法拋出未捕獲的異常時,事務(wù)才會回滾。如果異常被捕獲并不再拋出,那么事務(wù)將不會回滾。可以通過將捕獲的異常重新拋出來解決這個問題。
通過排查以上幾個原因,可以解決Spring注解式事務(wù)失效的問題。