在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注解式事务失效的问题。