其实数据库的七种传播行为在网上查询了一下,和Spring中使用到的7种事务传播行为是没什么差别的,因为我写的博文基本和JAVA有相关,所以就结合Spring中事务传播和例子来讲一下咯。

事务传播行为如下:

Require:支持当前事务,如果没有事务,就建一个新的,这是最常见的

Supports:支持当前事务,如果当前没有事务,就以非事务方式执行

Mandatory:支持当前事务,如果当前没有事务,就抛出异常

RequiresNew:新建事务,如果当前存在事务,把当前事务挂起;

NotSupported:以非事务方式执行操作,如果当前存在事务,就把事务挂起;

Never:以非事务方式执行,如果当前存在事务,则抛出异常

Nested:新建事务,如果当前存在事务,把当前事务挂起。与RequireNew的区别是与父事务相关,且有一个savepoint。即则在嵌套事务内执行。

其中,Require、Supports、NotSupported、Never两个看文字也就能了解,就不多说了。而Mandatory是要求所有的操作必须在一个事务里,较Require来说,对事务要求的更加严格。

RequireNew:当一个Require方法A调用RequireNew方法B时,B方法会新new一个事务,并且这个事务和A事务没有关系,也就是说B方法出现异常,不会导致A的回滚,同理当B已提交,A再出现异常,B也不会回滚。

Nested:这个和RequireNew的区别是B方法的事务和A方法的事务是相关的。只有在A事务提交的时候,B事务都会提交。也就是说当A发生异常时,A、B事务都回滚,而当B出现异常时,B回滚,而A回滚到savepoint,如下代码所示:

publicvoid A(){

//操作1

//操作2

//操作3

try{

//savepoint

B();//一个Nested的方法

} catch{

//出现异常,B方法回滚,A方法回滚到

//savepoint,也就是说操作1、2、3 都还在

C();

} finally{

}

}

使用步骤:

步骤一、在spring配置文件中引入<tx:>命名空间

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

 http://www.springframework.org/schema/tx

 http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持

<!-- 事务管理器配置, Hibernate单数据源事务 --> <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 使用annotation定义事务--> <tx:annotation-driventransaction-manager="defaultTransactionManager" proxy-target-class="true"/>

步骤三、在接口或类的声明处 ,写一个@Transactional.

要是只在接口上写, 接口的实现类就会继承下来、接口的实现类的具体方法,可以覆盖类声明处的设置

@Transactional   //类级的注解、适用于类中所有的public的方法

事务的传播行为和隔离级别

大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅。

事物注解方式: @Transactional

当标于类前时, 标示类中所有方法都进行事物处理 , 例子:

@Transactional public classTestServiceBean implements TestService {}

当类中某些方法不需要事物时:

@Transactional public classTestServiceBean implements TestService { private TestDao dao; publicvoid setDao(TestDao dao) { this.dao = dao; } @Transactional(propagation =Propagation.NOT_SUPPORTED) publicList<Object> getAll() { return null; } }

事物传播行为介绍:

@Transactional(propagation=Propagation.REQUIRED)

如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)

@Transactional(propagation=Propagation.NOT_SUPPORTED)

容器不为这个方法开启事务

@Transactional(propagation=Propagation.REQUIRES_NEW)

不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务

@Transactional(propagation=Propagation.MANDATORY)

必须在一个已有的事务中执行,否则抛出异常

@Transactional(propagation=Propagation.NEVER)

必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)

@Transactional(propagation=Propagation.SUPPORTS)

如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.


数据库的七种传播方式相关推荐

  1. 【数据库视频】七种连接方式

    数据表的查询与管理只是针对数据库中的一个表格进行的查询管理,如果现在我们想要同时的看到两个数据表中的数据的或,需要怎么实现?答案是:使用多连接的方式进行查询 标题中说了SQL中有七种连接的方式,那么具 ...

  2. 数据事务四种隔离机制和七种传播行为

    数据事务四种隔离机制和七种传播行为 一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Seria ...

  3. oracle数据库连接名是什么,连接到Oracle数据库的几种命名方式

    连接到Oracle数据库的几种命名方式 从事 Oracle 相关工作的人,每天都会使用各种工具连接到 Oracle 数据库,比如:SQL*Plus.PL/SQL.TOAD.SQLDeveloper 等 ...

  4. Oracle数据库的四种启动方式

    Oracle数据库的四种启动方式 1.startup nomount 非安装启动:这种方式启动下可执行:重建控制文件.重建数据库 启动instance,即启动SGA和后台进程,这种启动只需要init. ...

  5. 知识付费的七种变现方式

    知识付费的七种变现方式. 一在线问答 以文字.音频.视频等方式来对提问者的问题进行回答.只要你在某些领域有丰富的知识积累,那么你的回答就能得到提问者的青睐,就可以赚取相应的佣金.不过这种收益方式效果甚 ...

  6. VB与各数据库的几种连接方式

    VB与各数据库的几种连接方式 -.用DAO控件连接数据库 1.与Access2000数据库连接 Private Sub Command1_Click() '也可直接在控件属性中设置以下各项但在控件属性 ...

  7. 数据库的8种优化方式

    前言: 关于数据库的优化方案,网上有不少资料和方法,但众说纷纭,作品良莠不齐,不是缺斤少两,就是过于冗余. 在浏览了很多文章之后觉得这篇文章,总结得很经典,文章流量也很大,所以拿来和大家分享,积累优质 ...

  8. MySQL数据库的四种登录方式

    MySQL数据库的四种登录方式 登录方式 MySQL数据库的登录主要有四种方式: Command Line Command Line是安装MySQL自带的,你只需要找到图一的应用打开然后输入密码就可以 ...

  9. 数据库优化几种常见方式

    数据库优化几种常见方式 一.数据库编码规范 1)从 JDBC 编程的角度讲,用 PreparedStatement 一般来说比 Statement 性能高,因为在使用 时,SQL 语句被预编译并存储在 ...

最新文章

  1. LRU算法确定最后使用时间的顺序-栈
  2. 冬奥冠军武大靖也有减重烦恼,还为此发了篇论文
  3. 11种常见SQLMAP使用方法详解
  4. 第二章 数据类型和文件操作
  5. 深入分析Nginx 502 Bad Gateway和Nginx 504 Gateway(亲测)
  6. SAP API开发方法大全
  7. Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET
  8. 一个学妹写的按键检测函数把我秀翻了!
  9. the blocks problem(uva 101 or poj 1208)
  10. 657. 机器人能否返回原点
  11. 你必须掌握的常用正则表达式大全
  12. paip.InternetExplorer.Application打开非IE的解决方法
  13. citp协议服务器,Picturall Octo 媒体服务器
  14. 多维尺度分析之下不同模型的比较
  15. spark-sql-perf
  16. 文档印刷体中字符类符号
  17. 江苏大学 操作系统 知识点提纲 期末考试/考研 复习
  18. WIFI: N, Legacy and AC
  19. Python中的StringIO与cStringIO简析
  20. 装显卡发现驱动不兼容,但是显卡驱动确实和显卡版本一致修改inf文件

热门文章

  1. ArcGIS Engine 编辑介绍
  2. 基于 Annotation 拦截的 Spring AOP 权限验证方法
  3. C#操作MySQL数据库的简单例子
  4. Windows下启动停止SQL Server 2005服务
  5. 使用FFmpeg命令行进行UDP、RTP推流(H264、TS),ffplay接收
  6. webpack打包的两种方式
  7. 浅析Linux Native AIO的实现
  8. ACE之Proactor模式使用实例
  9. C++、C#写的WebService相互调用
  10. C++ 函数的引用返回值