spring中的事务管理(一)

本文介绍了Spring框架中的事务管理,包括编程式和声明式事务管理。编程式事务管理涉及手动控制事务的开始、提交、回滚和资源关闭。声明式事务管理则通过AOP将事务逻辑与业务代码分离,更易于使用。Spring提供了PlatformTransactionManager接口,支持多种事务管理器实现,如DataSourceTransactionManager、JtaTransactionManager等。此外,@Transactional注解使得在方法或类级别上声明事务变得简单,只需在配置中启用<tx:annotation-driven>即可。
摘要由CSDN通过智能技术生成

spring中的事务管理(一)


        作为企业级应用程序框架,Spring 在不同的事务管理 API 之上定义了一个抽象层.而应用程序开发人员不必了解底层的事务管理 API, 就可以使用Spring 的事务管理机制.

 

编程式事务管理

使用原生的JDBC API进行事务管理

1.获取数据库连接Connection对象

2.取消事务的自动提交

3.执行操作

4.正常完成操作时手动提交事务

5.执行失败时回滚事务

6.关闭相关资源

 

Spring 既支持编程式事务管理, 也支持声明式的事务管理.

编程式事务管理: 将事务管理代码嵌入到业务方法中来控制事务的提交和回滚. 在编程式管理事务时, 必须在每个事务操作中包含额外的事务管理代码.

声明式事务管理: 大多数情况下比编程式事务管理更好用. 它将事务管理代码从业务方法中分离出来, 以声明的方式来实现事务管理. 事务管理作为一种横切关注点, 可以通过 AOP 方法模块化. Spring 通过 Spring AOP 框架支持声明式事务管理.

 

Spring 从不同的事务管理 API 中抽象了一整套的事务机制. 开发人员不必了解底层的事务 API, 就可以利用这些事务机制. 有了这些事务机制, 事务管理代码就能独立于特定的事务技术了.

Spring 的核心事务管理抽象是interface PlatformTransactionManager它为事务管理封装了一组独立于技术的方法. 无论使用 Spring 的哪种事务管理策略(编程式或声明式), 事务管理器都是必须的.

 

Spring中的事务管理器的不同实现

DataSourceTransactionManager:在应用程序中只需要处理一个数据源, 而且通过 JDBC 存取

JtaTransactionManager:在 JavaEE 应用服务器上用 JTA(Java Transaction API) 进行事务管理

HibernateTransactionManager:用 Hibernate 框架存取数据库

……

事务管理器以普通的 Bean 形式声明在 Spring IOC 容器中

 

 

用 @Transactional 注解声明式地管理事务

除了在带有切入点, 通知和增强器的 Bean 配置文件中声明事务外, Spring 还允许简单地用 @Transactional 注解来标注事务方法.

为了将方法定义为支持事务处理的,可以为方法添加 @Transactional 注解. 根据 Spring AOP 基于代理机制, 只能标注公有方法.

可以在方法或者类级别上添加@Transactional 注解. 当把这个注解应用到类上时,这个类中的所有公共方法都会被定义成支持事务处理的.

在 Bean 配置文件中只需要启用 <tx:annotation-driven> 元素, 并为之指定事务管理器就可以了.

 

如果事务处理器的名称是transactionManager, 就可以在<tx:annotation-driven> 元素中省略 transaction-manager 属性. 这个元素会自动检测该名称的事务处理器.

 

<!-- 配置事务管理器 -->

    <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <!--设置数据源 -->

        <propertyname="dataSource"ref="dataSource"></property>

    </bean>

   

    <!--启用事务的注解支持 -->

    <!--如果事务管理器的id属性值是transactionManager,transaction-manager属性就可以省略 -->

    <tx:annotation-driven/>

 

 

 

 

用事务通知声明式地管理事务(xml)

<!-- 配置事务管理器 -->

    <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <propertyname="dataSource"ref="dataSource"></property>

    </bean>

   

    <!--配置事务 -->

    <tx:adviceid="txAdvice">

        <!--配置添加事务的方法 -->

        <tx:attributes>

              <!--给具体的方法添加事务 -->

            <tx:methodname="test"propagation="REQUIRED"/>

            <!--给查询的方法添加事务 -->

            <tx:methodname="get*"read-only="true"/>

            <!--给所有的方法添加事务 -->

            <tx:methodname="*"/>

        </tx:attributes>

    </tx:advice>

    <!--配置中AOP -->

    <aop:config>

        <!--配置切入点表达式 -->

        <aop:pointcutexpression="execution(* com.atguigu.service.*.*(..))"

                id="pointCut"/>

        <!--将添加的方法与切入点表达式关联 起来 -->

        <aop:advisoradvice-ref="txAdvice"pointcut-ref="pointCut"/>

    </aop:config>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值