数据库的七种传播方式
其实数据库的七种传播行为在网上查询了一下,和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没有声明事务,那就不用事务.
数据库的七种传播方式相关推荐
- 【数据库视频】七种连接方式
数据表的查询与管理只是针对数据库中的一个表格进行的查询管理,如果现在我们想要同时的看到两个数据表中的数据的或,需要怎么实现?答案是:使用多连接的方式进行查询 标题中说了SQL中有七种连接的方式,那么具 ...
- 数据事务四种隔离机制和七种传播行为
数据事务四种隔离机制和七种传播行为 一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Seria ...
- oracle数据库连接名是什么,连接到Oracle数据库的几种命名方式
连接到Oracle数据库的几种命名方式 从事 Oracle 相关工作的人,每天都会使用各种工具连接到 Oracle 数据库,比如:SQL*Plus.PL/SQL.TOAD.SQLDeveloper 等 ...
- Oracle数据库的四种启动方式
Oracle数据库的四种启动方式 1.startup nomount 非安装启动:这种方式启动下可执行:重建控制文件.重建数据库 启动instance,即启动SGA和后台进程,这种启动只需要init. ...
- 知识付费的七种变现方式
知识付费的七种变现方式. 一在线问答 以文字.音频.视频等方式来对提问者的问题进行回答.只要你在某些领域有丰富的知识积累,那么你的回答就能得到提问者的青睐,就可以赚取相应的佣金.不过这种收益方式效果甚 ...
- VB与各数据库的几种连接方式
VB与各数据库的几种连接方式 -.用DAO控件连接数据库 1.与Access2000数据库连接 Private Sub Command1_Click() '也可直接在控件属性中设置以下各项但在控件属性 ...
- 数据库的8种优化方式
前言: 关于数据库的优化方案,网上有不少资料和方法,但众说纷纭,作品良莠不齐,不是缺斤少两,就是过于冗余. 在浏览了很多文章之后觉得这篇文章,总结得很经典,文章流量也很大,所以拿来和大家分享,积累优质 ...
- MySQL数据库的四种登录方式
MySQL数据库的四种登录方式 登录方式 MySQL数据库的登录主要有四种方式: Command Line Command Line是安装MySQL自带的,你只需要找到图一的应用打开然后输入密码就可以 ...
- 数据库优化几种常见方式
数据库优化几种常见方式 一.数据库编码规范 1)从 JDBC 编程的角度讲,用 PreparedStatement 一般来说比 Statement 性能高,因为在使用 时,SQL 语句被预编译并存储在 ...
最新文章
- LRU算法确定最后使用时间的顺序-栈
- 冬奥冠军武大靖也有减重烦恼,还为此发了篇论文
- 11种常见SQLMAP使用方法详解
- 第二章 数据类型和文件操作
- 深入分析Nginx 502 Bad Gateway和Nginx 504 Gateway(亲测)
- SAP API开发方法大全
- Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- 一个学妹写的按键检测函数把我秀翻了!
- the blocks problem(uva 101 or poj 1208)
- 657. 机器人能否返回原点
- 你必须掌握的常用正则表达式大全
- paip.InternetExplorer.Application打开非IE的解决方法
- citp协议服务器,Picturall Octo 媒体服务器
- 多维尺度分析之下不同模型的比较
- spark-sql-perf
- 文档印刷体中字符类符号
- 江苏大学 操作系统 知识点提纲 期末考试/考研 复习
- WIFI: N, Legacy and AC
- Python中的StringIO与cStringIO简析
- 装显卡发现驱动不兼容,但是显卡驱动确实和显卡版本一致修改inf文件