spring中的aop事物

来源:互联网 发布:死神漫画单行本淘宝 编辑:程序博客网 时间:2024/06/10 00:29
  • 事物的特性(ACID)
    • A(Atomicity):原子性
    • C(Consistency):一致性
    • I(Isolation):隔离性
    • D(Durability):持久性/永久

事物并发带来的问题

  • 脏读
  • 不可重复读
  • 幻读

事物的隔离级别

  • 读未提交
  • 读已提交
  • 可重复读
  • 串行化

spring封装了事物管理代码

  • 事物操作

    • 打开事物
    • 提交事物
    • 回滚事物

    事物操作对象

    • 因为在不同平台操作事物的代码各不相同,spring提供了一个接口:PlatformTransactionManager实现类:
      DataSourceTransactionManager
      HibernateTransitionManager
      注意:在spring中事务管理最核心的对象就是TransactionManager

xml配置事物

<!-- 数据库连接池 --><bean name="dataSource" class="...">....</bean><!-- 事物核心管理器 --><bean name="transactionManager" class="org.springframework.jdbc.dataSource.DataSourceTransactionManager ><property name="dataSource" ref="dataSource" /></bean>.....<!-- 配置事物通知 --><tx:advice id="txAdvice" transaction_manager="transactionManager"    <tx:attributes>        <!-- 以方法为单位,指定方法用什么事物属性             isolation:隔离级别            propagation:传播行为            readonly:是否只读        -->        <tx:methond name="save" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />        <tx:methond name="update" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />        <tx:methond name="delete" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />        <tx:methond name="get" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />    </tx:attributes></tx:advice><!--配置织入 --><aop:config>    <!--配置切点表达式 -->    <aop:pointcut expression="exexution(* com.gjh.service.*ServiceImpl.*(..))) id="txPC" />    <!--配置切面:通知+切点        advice-ref:通知的名称        pointcut-ref:切点的名称    -->    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPC" /></aop:config>

注解配置

  • 开启使用注解管理aop事物
<!-- 数据库连接池 --><bean name="dataSource" class="...">....</bean><!-- 事物核心管理器 --><bean name="transactionManager" class="org.springframework.jdbc.dataSource.DataSourceTransactionManager ><property name="dataSource" ref="dataSource" /></bean><!-- 开启使用注解管理aop事物 --><tx:annotation-driven />
  • 使用注解
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQIRED,readOnly=false)//给方法家伙是那个注解public void update(){}
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQIRED,readOnly=false)//类中所有方法都加上事物public class UserServiceImpl implements UserService{}
原创粉丝点击