首页 > 代码库 > spring事物

spring事物

A:spring事物传播属性,共有7种

1 PROPAGATION_MANDATORY:规定了方法必须在事务中运行,否则会抛出异常

2 PROPAGATION_NESTED:使方法运行在嵌套事务中,否则这个属性和PROPAGATION_REQUIRED属性的义相同

3 PROPAGATION_NEVER:使当前方法永远不在事务中运行,否则抛出异常

4 PROPAGATION_NOT_SUPPORTED:定义为当前事务不支持的方法,在该方法运行期间正在运行的事务会被暂停

5 PROPAGATION_REQUIRED:规定当前的方法必须在事务中,如果没有事务就创建一个新事务,一个新事务和方法一同开始,随着方法的返回或抛出异常而终止

6 PROPAGATION_REQUIRED_NEW :当前方法必须创建新的事务来运行,如果现存的事务正在运行就暂停它

7 PROPAGATION_SUPPORTS:如果当前在事务中,即以事务的形式运行,如果当前不再一个事务中,那么就以非事务的形式运行

B:事务的隔离级别

ISOLATION_DEFAULT:使用数据库默认的隔离级别

ISOLATION_COMMITTED:允许读取其他并发事务已经提交的更新(防此脏读)

ISOLATION_READ_UNCOMMITTED:允许读取其他并发事务还未提交的更新,会导致事务之间的3个缺陷发生,这是速度最快的一个隔离级别,但同时它的隔离级别也是最低

ISOLATION_REPEATABLE_READ : 除非事务自身修改了数据,否则规定事务多次重复读取数据必须相同(防此脏读,不可重复读)

SOLATION_SERIALIZABLE :这是最高的隔离级别,它可以防此脏读,不可重复读和幻读等问题。

C:事务的只读属性 
      在对数据库的操作中,查询是使用最频繁的操作,每次执行查询时都要从数据库中重新读取数据,有时多次读取的数据都是相同的,这样的数据操作不仅浪费了系统资源,还影响了系统速度。对访问量大的程序来说,节省这部分资源可以大大提    升系统速度。 
如果将事务声明为只读的,那么数据库可以根据事务的特性优化事务的读取操作。事务的只读属性需要配合事务的传播行为共同设置。例如: 
    <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop> 

D:事务的超时属性     
      这个属性和事务的只读属性一样需要搭配事务的传播行为共同设置,它设置了事务的超时时间,事务本身可能会因某种原因很长没有回应,在这期间事务可能锁定了数据库的表格,这样会出现严重的性能问题。通过设置事务的超时时间,从开始执行事务起,在规定的超时时间内如果没有事务就将它回滚。事务的超时属性以timeout_为前缀和一个整型数字定义,例如: 
    <prop key="query*">PROPAGATION_REGUIRED,timeout_5,readOnly</prop>