1、Spring事务失效的几种原因

Spring事务失效的几种原因

1、Bean没有被Spring管理,即类上没有加入@Service、@Component等注解。

2、方法没有使用public修饰

@Transactional注解的方法必须用public关键词修饰,方法的修饰符为:privatedefault、`protected时都不会生效。

3、数据源没有开启事务管理器,如下:

@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

4、事务的传播机制未正确使用

@Transactional(propagation = Propagation.NOT_SUPPORTED)
    public void updateOrder(Order order) {
        // update order
    } 
}

5、使用了异常处理,但重新抛出的异常不是运行时异常例如,抛出了:

throw new Exception("更新错误");

此时需要在注解上加入:

@Transactional(rollbackFor = Exception.class)

6、注解修饰的方法为非public时,@Transactional不会起作用。

7、同一类内,调用带有@Transactional注解的方法不会生效

8、在@Transactional注解修饰的方法内使用try...catch...捕获异常,在catch内不抛出新的异常

9、使用的数据库引擎不支持事务

posted @ 2022-11-17 14:40  张瑞丰  阅读(817)  评论(0编辑  收藏  举报