spring中的事务管理(一)

spring中的事务管理(一)        作为企业级应用程序框架,Spring 在不同的事务管理 API 之上定义了一个抽象层.而应用程序开发人员不必了解底层的事务管理 API, 就可以使用Spring 的事务管理机制. 编程式事务管理使用原生的JDBC API进行事务管理1.获取数据库连接Connection对象2.取消事务的自动提交3.执行操作4.正
摘要由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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值