声明式事务和编程式事务

时间:2021-09-13 16:37:27

编程式事务:

所谓编程式事务指的是通过编程式方式实现事务,即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager,对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务:

管理建立在AOP之上的,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的试管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transaction注解的方式),便可以将事务规则应用到业务逻辑中。


Spring中的事务分为物理事务和逻辑事务:

(1)物理事务:就是底层数据库提供的事务支持,如JDBC或JTA提供的事务。

(2)逻辑事务:是Spring管理的事务,不同于物理事务,逻辑事务提供更丰富的控制,而且如想得到Spring事务管理 的好处,必须使用逻辑事务。


逻辑事务解决方案:

(1)低级别解决方案

使用工具类获取连接和释放连接,如使用org.springframework.jdbc.datasource包中的DataSourceUtils类来获取和释放具有逻辑事务功能的连接。当然对集成第三方ORM框架也提供了类似的工具类,如对Hibernate提供了SessionFactoryUtils工具类,JPA的EntityManagerFactoryUtils等。

(2)高级别解决方案

使用Spring提供的模板类,如jdbcTemplate、HibernateTemplate和JpaTemplate模板类等,而这些模板类内部其实是使用了低级别解决方案中的工具类来管理连接或会话。