一.事务参数解析
PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。
二、Isolation Level(事务隔离等级):
1、Serializable:最严格的级别,事务串行执行,资源消耗最大;
2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。
避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,
避免了“脏读取”。该级别适用于大多数系统。
4、Read Uncommitted:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务的并发问题。
我们知道并行可以提高数据库的吞吐量和效率,但是并不是所有的并发事务都可以并发运行,这需要查看数据库教材的可串行化条件判断了。
这里就不阐述。
我们首先说并发中可能发生的3中不讨人喜欢的事情
1: Dirty reads--读脏数据。也就是说,比如事务A的未提交(还依然缓存)的数据被事务B读走,
如果事务A失败回滚,会导致事务B所读取的的数据是错误的。
2: non-repeatable reads--数据不可重复读。比如事务A中两处读取数据-total-的值。
在第一读的时候,total是100,然后事务B就把total的数据改成200,事务A再读一次,
结果就发现,total竟然就变成200了,造成事务A数据混乱。
3: phantom reads--幻象读数据,这个和non-repeatable reads相似,也是同一个事务中多次读不一致的问题。
但是non-repeatable reads的不一致是因为他所要取的数据集被改变了(比如total的数据),
但是phantom reads所要读的数据的不一致却不是他所要读的数据集改变,而是他的条件数据集改变。
比如Select account.id where account.name="ppgogo*",第一次读去了6个符合条件的id,
第二次读取的时候,由于事务b把一个帐号的名字由"dd"改成"ppgogo1",结果取出来了7个数据。
Dirty reads non-repeatable reads phantom reads
Serializable 不会 不会 不会
REPEATABLE READ 不会 不会 会
READ COMMITTED 不会 会 会
Read Uncommitted 会 会 会
三、readOnly
事务属性中的readOnly标志表示对应的事务应该被最优化为只读事务。这是一个最优化提示。
在一些情况下,一些事务策略能够起到显著的最优化效果,
例如在使用Object/Relational映射工具(如:Hibernate或TopLink)时避免dirty checking(试图“刷新”)。
四、Timeout 在事务属性中还有定义“timeout”值的选项,指定事务超时为几秒。
在JTA中,这将被简单地传递到J2EE服务器的事务协调程序,并据此得到相应的解释。
分享到:
相关推荐
spring事务控制jar包,请网上自寻下载
Struts Spring mysql整合开发,Spring Aop事务控制,ssh用户登录实例
自己做的一个小案例,spring 的事务管理小案例,你也可以去以下链接看文章讲解https://blog.csdn.net/zyqblog/article/details/82624441
配制Spring事务和JdbcTemplate使用 配制Spring事务和JdbcTemplate使用
spring通过aspectj来实现事务控制
springMVC框架事务控制,保证业务操作的完整性 防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。 如:银行转帐。A账户减少的钱要加到B账户上,若A这边减了钱,B那边却还是一样的数,这...
声明式事务控制,spring2.5+hibernate3集成源码,附带有数据库脚本,可以直接导入到项目的工作空间。欢迎下载
Spring Boot数据库事务控制.zip
简单的Spring+MyBastis事务控制代码,包括2个超简单的数据库表,服务代码(同时更新2个表的数据,如果后面的表的处理出错,则事务会回滚),只是简单演示了事务控制功能,其他的没有涉及。测试功能采用JUnit4.
spring boot 纯注解方法事务控制回滚,注解+简单配置文件使用多线程demo
spring 简介,spring事务控制,Spring注解,spring定时调用,spring线程池,springMVC,quartz,springsecurity,的详细解析文档
Spring4+SpringMVC+Mybaties 内含有事务控制
1.问题引入 2.事务基本概念、特性 3.事务并发引起问题,隔离级别 4.Springboot事务控制
Spring中的事务控制,内有详细的说明。
Spring Boot的事务控制.docxSpring Boot的事务控制.docxSpring Boot的事务控制.docxSpring Boot的事务控制.docxSpring Boot的事务控制.docxSpring Boot的事务控制.docxSpring Boot的事务控制.docxSpring Boot的事务...
最简单的dbutils+spring事务控制,注解+xml配置,入门必备.绝对可以运行.包含spring bean,aop,注解,事务等基础知识
spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制
四,Spring基于注解的开发对应源代码,事务详解(概念重点),基于注解的事务控制,Spring集成JUnit
演示了spring编程式事务的实现,通过TransactionTemplate模板进行事务控制