Spring中实现事务方式

Spring 中实现事务的方式

Spring 并不直接支持事务,只有当数据库支持事务时,Spring 才支持事务,Spring 只不过简化了开发人员实现事务的步骤。 Spring 提供了两种方式实现事务:①声明式,②编程式。

编程式事务:允许用户在代码中精确定义事务的边界。

声明式事务:(基于AOP)有助于用户将操作与事务规则进行解耦。简单地说,编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,所以既能起到事务管理的作用,又可以不影响业务代码的具体实现。

声明式事务

声明式事务管理只需要用到@Transactional 注解和@EnableTransactionManagement(开启事务管理功能)。它是基于 Spring AOP 实现的,并且通过注解实现,实现起来简单,对原有代码没有入侵性。

事务的切面有两个主要职责:

在’before’时,切面提供一个调用点,来决定被调用业务方法应该在正在进行事务的范围内运行,还是开始一个新的独立事务。

在’after’时,切面需要确定事务被提交,回滚或者继续运行。


@Transactional注解不起作用的集中情况:

①Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用。

②在类内部调用调用类内部@Transactional标注的方法。这种情况下也会导致事务不开启。


③事务方法内部捕捉了异常,没有抛出新的异常,导致事务操作不会进行回滚。

④ 异常类型是不是unchecked异常。如果我想check异常也想回滚怎么办,注解上面写明异常类型即可。@Transactional(rollbackFor=Exception.class)

你可能感兴趣的:(Spring中实现事务方式)