spring对事务进行管理

来源:互联网 发布:sql获取seq 编辑:程序博客网 时间:2024/05/21 18:49

事务:在计算机中 ,一般是指对数据库进行的一系列操作

 它有四个特性:1:原子性:指事务包含的所有操作,要么全部执行,要么全都不执行

  2:持久性:事务一旦没提交了 ,他对数据库数据产生的影响是永久的

  3:一致性:事务执行前后 都得处于一直状态,就好比转账   两边的钱加起来要相等

  4:隔离性:当多个用户并发访问数据库时,比如操作同一张表,数据库为每一个用户开启一                                                          个事务,

      不能被其它事务所干扰,多个并发事务之间要相互隔离,即对于任意两个事务t1                                                                和t2,在事务t1看来  ,t2要么在t1开始之前就结束了,要么在t1结束之后再开始


             spring对事务进行管理:一般有两种方式,一种是编码式的 (可以用springAOP实现),一种是声明式的, 而声明式的又分为两种,一种是基于注解的,一种是基于配置文件的,我们这里就讲解一下啊声明式的 

基于注解的方式:在spring配置文件里边配置:

            

  <tx:annotation-driven />//声明注解起作用了   <bean id="transactionManager"   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   <property name="dataSource" ref="dataSource" />//数据源的配置  
   </bean>
                 然后在方法上或者类上就可以使用@transactional注解了,这个注解有很多属性

比如:name:用于指定用的那个transactionManage,

  isolation:事务的隔离度

  propagation:事务的传播 默认值为REQUIRED

  rollback-for:用于指定那些异常要发生回滚

       

注意:如果一个方法没有声明他是事务管理的  那么他调用事务管理的方法 ,事务管理的方法也不会对事务进行管理的.

基于配置文件的(通过aop)

<!-- 事物切面配置 -->  <tx:advice id="advice" transaction-manager="transactionManager">      <tx:attributes>          <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>          <tx:method name="insert" propagation="REQUIRED" read-only="false"/>      </tx:attributes>  </tx:advice>    <aop:config>      <aop:pointcut id="testService" expression="execution (* com.baobao.service.MyBatisService.*(..))"/>      <aop:advisor advice-ref="advice" pointcut-ref="testService"/>  </aop:config>