首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring 2.5 事宜属性

2012-10-26 
spring 2.5 事务属性spring事务的属性 转载自http://zhangli-lisa.iteye.com/blog/4003831?关于事务默认的

spring 2.5 事务属性

spring事务的属性

转载自http://zhangli-lisa.iteye.com/blog/400383

1?关于事务默认的回滚
一. 事务碰到unchecked? Exception ,默认情况下自动回滚,如果想取消自动回滚可以指定属性 @Transactional(noRollbackFor=RuntimeException.class)
二. 事务碰到checked Exception,默认情况下事务不回滚,如果想回滚可以用属性指定@Transactional(rollbackFor=Exception.class)
三. 当然事务属性中的另外一个也是可以的不过要指定的是类名noRollbackForClassName

2?事务的开启与关闭(默认情况下spring是开启事务的)
@Transactional(propagation=Propagation.NOT_SUPPORTED)
public List<StudentBean> getAllStudent() {
return jdbcTemplate.query("select * from student", new StudentRowMapper());
}

3?@Transactional(readOnly=true)

只读事务,就是不用控制,可以提高效率
下面是事物的其它属性

4?@Transactional(timeout=1000)
事务时间

5·事务的传播属性
@Transactional(propagation=Propagation.NOT_SUPPORTED)

REQUIRED: 业务方法需要在一个事务中运行。如果方法运行时,已经在一个事务中,哪么加到该事务,否则为自己创建一个新的事务。Spring默认的事务传播属性设置@Transactional(propagation=Propagation.REQUIRED)

NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行。

REQUERESNEW:属性表明不管是否存在事务,业务方法总会为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有的事务会被挂起,新的事务会被创建,直到方法执行结束,新事务才算结束,原先的事务才会恢复执行。

MANDATORY:该属性指定业务方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果业务方法在没有事务的环境下调用,容器就会抛出异常。

SUPPORTS:这一事务属性表明,如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分。如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行

NEVER::指定业务方法绝对不能在事务范围内执行。如果业务方法在某个事务范围内执行,则容器抛出异常,只有业务方法没有关联到任何事务,才能正常执行。

NESTED:如果一个事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按REQUIRED属性执行,它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionalmaManager事务管理器起效。

比如:一个get方法是不需要事务的,加上事务会影响效率的,这时我们可以加上这个属性设置:@Transactional(propagation=Propagation.NOT_SUPPORTED)。这时此方法就不会有事务控制了。

像save、update等业务方法默认都是要事务控制的
@Transactional(propagation=Propagation.REQUEIRED)---这个是默认的,可以省写


6·属性isolation—事务的隔离级别

@Transactional(isolation=Isolation.READ_UNCOMMITTED)

数据库系统提供了四种事务隔离级别(隔离级别是当数据库并行访问操作时,安全策略的实现)
数据库系统提供了四种事务隔离级别供用户选中。不同的隔离及、别采用不认同的锁类型来实现(共享锁、更新锁、排它锁),在四种隔离级别中,Serializable的隔离级别最高,Read Uncommited的隔离级别最低。大多数据库默认的隔离级别为Read Commited,如sql server,当然也有少数部分数据库默认的隔离级别为Repeatable Read,如mysql
Read Uncommited:读未提交数据(会出现脏读,不可重复读和幻读)
Read Commited:读已提交数据(会出现不可重复读和幻读)
Repeatable Read:可重复读(会出现幻读)
Serializable:串行化

脏读:一个事物读到另一个事务未提交的更新数据
不可重复读:在同一个事务中,多次读取同一数据返回的结果有所不同。换句话就是,后续读可以读到另一个事务已提交的更新数据。相反,“可重复读”在同一事务中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能道道另一个事务已提交的更新数据
幻读:一个事务读取到另一个事务已提交的insert数据

热点排行