首页 > 代码库 > 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>