`

知识点八-2 :spring 2.5 事务属性

阅读更多
spring事务的属性

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数据
分享到:
评论

相关推荐

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    第一部分 点睛Spring 4.x 第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 ...

    spring.net中文手册在线版

    Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    第一部分 点睛Spring 4.x 第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    第一部分 点睛Spring 4.x 第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 ...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    JAVA核心知识点整理(有效)

    2:清空 eden、servicorFrom............................................................................................................................. 25 3:ServicorTo 和 ServicorFrom 互换................

    iBATIS实战

    书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 本书既可为广大的开发人员(不仅仅是Web应用程序开发人员)...

    JAVA上百实例源码以及开源项目源代码

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    JAVA上百实例源码以及开源项目

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

Global site tag (gtag.js) - Google Analytics