`

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事务配置模式,并结合具体的配置示例进行说明。 #### 一、每个Bean都有一个代理 这种方式是最直接也是最简单的配置方法。它通过为每个需要事务支持的Bean创建一个代理来实现。这种...

      spring 事务详解

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

      jdbc+spring+mysql事务理解和分析

      以下是对`jdbc+spring+mysql事务理解和分析`的详细说明: 1. **原子性(Atomicity)**:这是事务的基本特性,表示事务中的所有操作要么全部成功,要么全部回滚。如果在事务执行过程中发生错误,数据库会撤销所有已...

      在SSH中使用事物包括SSH的搭建和配置;事物的配置;注释详细

      在配置文件中,注释应详细说明每个元素的作用,例如在Spring的配置文件中,`<tx:annotation-driven>`的`transaction-manager`属性指定哪个事务管理器处理事务,`proxy-target-class="true"`表示使用CGLIB代理而不是...

      struts1,hibernate,spring整合demo1

      5. **事物管理**:在数据库操作中,事物是确保数据完整性和一致性的关键。Spring提供了PlatformTransactionManager接口,实现如DataSourceTransactionManager,用于管理数据库事务。在SSH整合中,通常会在Service层...

      Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

      在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论多数据源回滚策略。以下是对这些知识点的详细说明: 1. **动态数据源切换**: - 通过AspectJ实现数据源的动态切换,可以设置在...

      浅谈Spring中@Transactional事务回滚及示例(附源码)

      这些异常必须在代码中显式地处理,例如使用try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。checked异常继承自java.lang.Exception。 unchecked异常是指程序的逻辑错误,例如...

      Spring 1_2的hibernate事务处理

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

      Spring杂谈

      在讨论Spring杂谈之前,有必要对IoC(控制反转)和DI(依赖注入)的概念进行说明。IoC是一种设计模式,它的主要目的是降低代码之间的耦合度。通过IoC,对象的创建和依赖关系的维护转交给外部容器来管理,而不是由...

      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...

      在SSH中使用事物包括SSH的搭建和配置;事务的配置;注释详细。(完整项目)

      在SSH中,如果事务过程中发生异常,Spring会自动回滚事务,以确保数据的一致性。开发者也可以在遇到特定情况时手动触发回滚,例如通过抛出自定义异常或调用`TransactionAspectSupport.currentTransactionStatus()....

      跨多个数据库操作,同时连接两个一上的数据库,用事物关联起来

      "用JOTM向Servlet中添加事务"的实践则说明了如何在Web应用程序中启用JTA事务,这在处理Web服务请求时特别有用,因为这些请求可能涉及到对多个数据库的修改。 JTA介绍和JTA与JDBC事务的文档深入介绍了JTA的工作原理...

      spring资料

      根据给定的信息,可以看出这里似乎存在一定的混淆,因为标题与描述部分均提到“spring资料”,但提供的内容却是关于英语语法的基础知识。为了满足题目要求,我会假设需要从这些英语语句的基本结构中提取出相关知识点...

      springmvc +shiro+querydsl+jpa框架多数据源配置详细说明

      Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置详细说明 Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置是当前 Web 应用程序中常见的技术栈组合。该技术栈组合可以提供强大的安全认证、数据查询和...

      atomikos 事物管理器

      具体到每个版本的变更,通常会在官方发布说明或者更新日志中详细列出。开发者在升级或选择使用特定版本时,应查阅相应的文档以了解详细信息。 总结来说,Atomikos 是一款强大的开源事务管理工具,尤其适合需要处理...

      java EE项目开发实训设计说明书.doc

      Java EE项目开发实训设计说明书是针对Java企业级应用开发的学习与实践所编写的文档,旨在通过实际项目来训练和评估开发者对于Struts2.x、Hibernate和Spring这三种主流Java Web框架的理解与应用能力。这些框架在现代...

      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室课程说明动画是关于移动的事物……或者更好的...

    Global site tag (gtag.js) - Google Analytics