`

spring 中事物的说明

 
阅读更多

本文主要介绍spring中事务的annotation

项目中某个功能20并发下响应时间为15ms,而期望指标为10ms。功能中包含9条sql,性能诊断初步定位在spring的事务处理上,耗时接近5ms,大致了解了下spring的Transactional配置含义。

将propagation由Propagation.REQUIRES_NEW改为Propagation.REQUIRED响应时间也只提高了0.5ms。具体还在调优中

以下是spring事务不同的annotation
// 业务方法需要在一个事物中运行,如果方法运行时,已经存在一个事物中,
// 那么加入该事物,否则为自己创建一个新事物。
@Transactional(propagation = Propagation.REQUIRED)
public void test1() {
}

// 声明方法不需要事务,如果方法没有关联到一个事务,容器不会为它开启事物。
// 如果方法在一个事物中被调用,该事物会被挂起,在方法调用结束后,原先的
// 事物便会恢复执行。
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void test2() {
}

// 表明不管是否存在事物,业务方法总会为自己发起一个新事物。
// 如果方法已经运行在一个事物中,则原有事物会被挂起,
// 新的事物会被创建,直到方法执行结束,新事物才算结束,
// 原先的事务才会被恢复执行。
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void test3() {
}

// 该属性指定业务方法只能在一个已经存在的事物中执行,
// 业务方法不能发起自己的事物,如果业务方法在没有事物的环境
// 下调用,容器就会抛出异常。
@Transactional(propagation = Propagation.MANDATORY)
public void test4() {
}

// 这个事物属性表明,如果业务方法在某个事务范围内被调用,则方法成为该事物的一部分,
// 如果业务方法在事务范围外被调用,则方法在没有事物的环境下执行。
@Transactional(propagation = Propagation.SUPPORTS)
public void test5() {
}

// 指定业务方法绝对不能在事物范围内执行。如果业务方法在某个事物中执行,
// 容器会抛出异常,只有业务方法没有关联到任何事物,才能正常执行。
@Transactional(propagation = Propagation.NEVER)
public void test6() {
}

// 如果一个活动的事物存在,则运行在一个嵌套的事物中,如果没有活动事物,
// 则按REQUIRED属性执行,它使用了一个单独的事物,这个事物拥有多个回滚的保存点,
// 内部事务的回滚不会对外事物造成影响,它只对DataSourceTransactionManager
// 事务管理器起效。
@Transactional(propagation = Propagation.NESTED)
public void test7() {
}

@Transactional(isolation = Isolation.DEFAULT)
public void test8() {
}

// 读已提交数据(会出现不可重复读和幻读)
@Transactional(isolation = Isolation.READ_COMMITTED)
public void test9() {
}

// 读未提交数据(会出现脏读、不可重复读和幻读)
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
public void test10() {
}

// 可重复读(会出现幻读)
@Transactional(isolation = Isolation.REPEATABLE_READ)
public void test11() {
}

// 串行化
@Transactional(isolation = Isolation.SERIALIZABLE)
public void test12() {
}

// 抛出Exception异常时,记录回滚
@Transactional(rollbackFor = Exception.class)
public void test13() throws Exception {
}

// 抛出Exception异常时,记录不回滚
@Transactional(noRollbackFor = Exception.class)
public void test14() throws Exception {
}

其中部分名词解释:
  • 脏读:一个事物读取到另一个事物未提交的更新数据。
  • 不可重复读:在同一事物中,多次读取同一数据返回的结果有所不同。换句话说就是,后续读取可以读到另一事务已提交的更新数据。
  • 可重复读:在同一事物中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据。
  • 幻读:一个事务读取到另一事务提交的insert数据。


  • 分享到:
    评论

    相关推荐

      spring 事务详解

      spring的事务处理的详细说明和解析,事务的传播和使用的方式

      spring 注解事务管理

      spring使用注解进行事物管理例子,里面有说明.

      Spring 1_2的hibernate事务处理

      Spring 1_2的hibernate事务处理,更加详细的说明事务的处理在SPRING中

      hex-springcloud:SpringBoot 2.1.4 Spring Cloud Greenwich.SR1 微服务版本测试

      组件说明: 组件名称 版本 描述 SpringBoot 2.1.4 基础框架 Spring Cloud Greenwich.SR1 基础框架 Spring Cloud Gateway - 网关 Spring Cloud Eureka - 注册中心 Spring Cloud Ribbon - 客户端负载均衡 Spring Cloud...

      J2EE实验6.docx

      1.实现超市订单系统中供应商表的添加操作 2.配置事务管理器组件 3.在Spring配置文件中使用tx和aop命名空间下的标签配置声明式事务 4.修改上例,使用注解的方式配置声明式事务

      spring整合atomikos实现分布式事务的方法示例

      本文整合了一个spring和atomikos的demo,并且通过案例演示说明atomikos的作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      ssi+restfull整合源代码

      只要在此基础上拓展自己需要的功能接口就可以了,另外项目中采用了spring2.5中的注解技术,整个项目的事物,接口,都是通过注解来进行组装。项目数据库采用mysql5.1,项目层次清晰,结构紧凑,里面有说明文档。和...

      JTA事务源码示例

      如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,欢迎下载传播。有问题请在评价中...

      OFAnimation_Spring2015

      代码动画帕森斯新设计学院 / MFA Design & Technology 2015 年Spring / PGTE 5566 / CRN 5982 讲师:贝尔纳多·肖尔电子邮件: 时间:周二 7:00 - 9:40 PM 地点:D1200室课程说明动画是关于移动的事物……或者更好的...

      SSH框架示例(可以直接用)

      ****比较适合新手理解SSH框架***** 闲下来搭了个SSH框架,写些小系统的话可以直接拿来用哦。 连接池是proxool,log4... 搭这个框架的初衷主要是想自己配置一下spring整合proxool以及aop思想对service层的事物控制等。

      火炬博客系统7

      软件及安装说明 <br> 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

      火炬博客系统6

      软件及安装说明 <br> 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

      火炬博客系统5

      软件及安装说明 <br> 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

      hex-arch-kotlin-spring-boot:参考JVM多模块项目,用于使用六边形架构,DDD,Kotlin,Spring Boot,Quarkus,Lambda,Gradle的React式微服务和lambda

      六角结构(又名端口和适配器)/清洁结构/ DDD 允许应用程序同样由用户,程序,自动测试或批处理脚本驱动,并与最终的运行时设备和...项目描述该项目用于说明如何在多模块项目中将六角形体系结构应用于微服务(Spring Bo

      JSP基于SSM任务众包系统设计可升级SpringBoot

      ## 后台框架: SSM(SpringMVC + Spring + Mybatis) 功能说明: (1)帮助者模块:用户注册、登录、个人擅长事物的填写、搜索发布的任务、领取任务等功能; (2)用户模块:用户注册、登录、发布任务、搜索帮助者的...

      JSP基于SSM任务众包系统设计可升级SpringBoot设计

      ## 后台框架: SSM(SpringMVC + Spring + Mybatis) 功能说明: (1)帮助者模块:用户注册、登录、个人擅长事物的填写、搜索发布的任务、领取任务等功能; (2)用户模块:用户注册、登录、发布任务、搜索帮助者的...

      JSP基于SSM任务众包系统设计+源代码+文档说明+数据库.zip

      后台框架: SSM(SpringMVC + Spring + Mybatis) 功能说明: (1)帮助者模块:用户注册、登录、个人擅长事物的填写、搜索发布的任务、领取任务等功能; (2)用户模块:用户注册、登录、发布任务、搜索帮助者的擅长...

      分布式事务实践 解决数据一致性

      介绍了Spring的事务机制、事物抽象、内部事务和外部事物,以及常用的几种事务管理的实现,包括DataSource、JPA、JMS、JTA都通过实例进行说明。还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现...

      基于SSM实现的任务众包系统+sql数据库(毕设项目).zip

      ## 后台框架: SSM(SpringMVC + Spring + Mybatis) 功能说明: (1)帮助者模块:用户注册、登录、个人擅长事物的填写、搜索发布的任务、领取任务等功能; (2)用户模块:用户注册、登录、发布任务、搜索帮助者的...

      开源分布式事务管理组件Atomikos

      Atomikos,是一个基于Java的开源事务管理器,提供了事务管理和连接池,不需要应用服务器支持,支持JDBC和JMS事务,能提供对Spring,Hibernate的集成,有兴趣多了解的可以直接参考说明文当,有详细的介绍和使用说明。

    Global site tag (gtag.js) - Google Analytics