Spring 的声明式事物<06>

来源:互联网 发布:淘宝嘉联华 编辑:程序博客网 时间:2024/05/21 10:17

首先我们知道Spring 的声明式事务包括2种:

 1.编程式事务:

   通过代码的方式进行实现(此方法较复杂,不建议采用)

 2.声明式事务:

   通过在配置文件中配置和事务相关的信息。

   在Spring 框架中,声明式事务是以AOP 思想为基础的。

3.声明式事务的步骤:

   1):在IOC 容器中配置事务管理器的bean 

           

<!-- 配置事务管理器的bean --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 需要装配数据源对象 --><property name="dataSource" ref="dataSource"/></bean>

   2):开启基于注解的事务管理功能,并指定当前要使用的事务管理器对象。

          

<!-- 开启基于注解的事务功能 --><!-- 如果事务管理器的bean的id正好是:transactionManager,则transaction-manager属性可以省略 --><tx:annotation-driven transaction-manager="transactionManager"/>

   3):在要进行事务管理的方法上加@Transactional 

    

@Transactionalpublic void updateBookPrice(String isbn, int newPrice) {bookShopDao.updateBookPrice(isbn, newPrice);}

4.基于XML 文档配置的声明式事务:

  1):配置数据源对应的bean

       

<!-- 配置数据源的bean --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="user" value="${user}"/><property name="password" value="${password}"/><property name="jdbcUrl" value="${jdbcUrl}"/><property name="driverClass" value="${driverClass}"/></bean>

  2):配置事务管理器

<!-- 配置事务管理器bean --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean>


  3):配置事务属性

<!-- 配置事务属性 --><!-- advice对象需要指定id,便于其他位置引用 --><!-- advice对象需要指定当前事务管理器 --><tx:advice id="bookTransaction" transaction-manager="transactionManager"><tx:attributes><!-- 可以根据事务方法的前缀,统一设置事务属性 --><tx:method name="find*" read-only="true"/><tx:method name="get*" read-only="true"/><!-- 设置事务具体属性 --><tx:method name="purchase" isolation="READ_COMMITTED"/><!-- tx:method name="*"表示对所有方法都使用默认设置 --><tx:method name="*"/></tx:attributes></tx:advice>


  4):配置事务切面并和事务属性关联起来

<!-- 配置事务切面 --><aop:config><!-- 配置应用事务的方法对应的切入点 --><aop:pointcut expression="execution(* com.tx.component.service.BookShopServiceImpl.purchase(String, String))" id="bookPointCut"/><!-- 将事务属性和切入点关联起来 --><aop:advisor advice-ref="bookTransaction" pointcut-ref="bookPointCut"/></aop:config>



1 0
原创粉丝点击