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