事务

声明式事务的五大属性

1.传播机制(propagation)

指的是一个带有事务的方法A运行在另一个带有事务的方法B内部时,内层方法A是使用自己的事务还 是使用外层B的事务

required:默认值,表示如果外层方法B有事务,就使用外层方法B的事务,没有就使用自己的事务

requires_new:无论外层方法B有没有事务,内层方法A都使用自己的事务

supports:表示如果外层方法B有事务,就使用外层方法B的事务,如果外层方法B没有事务,就不使用事务

2.隔离级别(isolation):是针对数据库的并发访问的,不同的隔离级别,数据库有着不同的解决方法。

repeatable_read: 默认是 可重复度

read_uncommitted:读未提交

read_committed:读已提交

serializable:串行化读:就是如果设置了这个注解,运行期间就不允许改变值 也就是不允许并发操作。

3.回滚机制  通常只有运行时异常会自动回滚,编译时异常不会回滚,想要让其回滚只有设置rollbackFor

 rollbackFor  ={一个异常类的字节码}  就是在事务后面的参数列表里面加上 一个异常类的字节码,当你下面遇到这样的异常时 会回滚

no rollbackFor 就是即使是运行时异常,后面如果不想让其回滚,就在事务后加上norollbackFor={运行时异常的类字节码} 下面遇见这种类型的异常就不会自动回滚。

SQLException:本属于编译时异常,但是在遇见spring框架的时候底层被SQLErrorCodeSQLEceptionTranslator重写编译编 转化成了运行时异常  在遇见sqlException异常的时候也会自动回滚。

4.超时属性

:::.事务在数据库执行过程中,势必要消耗数据库的资源,如果让一个事务长期执行,就会影响其他事物的执行,所以一旦一个事务在指定的时间内还没有完成操作就让它回滚。

5.只读属性

readOnly = true  表示 只允许对数据库进行查询读取操作,不能对数据进行增 删 改 操作。

二、配置事务 两种方式

1.基于注解的方式:

  注意:不管是基于注解还是xml 都需要先配置事务源

   事务源!

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

这种基于注解的方式:

<!-- 一、注解的方式配置事务-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

然后在service层类或者方法上加上一个事务注解


@Transactional

第二种:基于xml的方式:只需要在配置文件中配置即可。

 1 <!--二、基于xml的方式配置事务-->
 2      <!--配置事务的通知-->
 3     <tx:advice id="interceptor" >
 4         <tx:attributes>
 5             <tx:method name="save*" propagation="REQUIRED"/>
 6             <tx:method name="find*" propagation="REQUIRED"/>
 7             <tx:method name="delete*" propagation="REQUIRED"/>
 8             <tx:method name="select*" read-only="true"/>
 9             <!--所有方法都适应,全局搜索-->
10             <tx:method name="*" read-only="true"/>
11         </tx:attributes>
12     </tx:advice>
13     <!--配置切面-->
14     <aop:config>
15         <aop:pointcut id="pointcut" expression="execution(* com.ujy.service.impl.*.*(..))"/>
16         <!--把切入点和通知类组织到一起成切面-->
17         <aop:advisor advice-ref="interceptor" pointcut-ref="pointcut"/>
18     </aop:config>
 
原文地址:https://www.cnblogs.com/ych961107/p/11830587.html