spring AOP的事务顺序问题

问题描述

在项目中有一个事务逻辑需要被很多业务触发后调用,使用了springAOP,在执行过程中发现事务不是按照执行顺序执行的比如业务1是最终执行的sql为update A业务采用aop方式在业务1执行后再执行,执行sql为update B实际情况确实先update B ,然后才update A

解决方案

1、你是用的hibernate吗? 如果是 你应该知道sql重排序问题引用10.10. Session刷出(flush)每间隔一段时间,Session会执行一些必需的SQL语句来把内存中的对象的状态同步到JDBC连接中。这个过程被称为刷出(flush),默认会在下面的时间点执行: 在某些查询执行之前 在调用org.hibernate.Transaction.commit()的时候 在调用Session.flush()的时候 涉及的SQL语句会按照下面的顺序发出执行: 所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序 所有对实体进行更新的语句 所有进行集合删除的语句 所有对集合元素进行删除,更新或者插入的语句 所有进行集合插入的语句 所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序 (有一个例外是,如果对象使用native方式来生成ID(持久化标识)的话,它们一执行save就会被插入。) 除非你明确地发出了flush()指令,关于Session何时会执行这些JDBC调用是完全无法保证的,只能保证它们执行的前后顺序。 当然,Hibernate保证,Query.list(..)绝对不会返回已经失效的数据,也不会返回错误数据。 除非你明确地发出了flush()指令,关于Session何时会执行这些JDBC调用是完全无法保证的,只能保证它们执行的前后顺序。
解决方案二:
[flash=200,200][img][img][list][*]引用[u][u][b][i][*][flash=200,200][url][img]引用123[b][/b] 8) 8) 8) [/img][/url][/flash][/i][/b][/u][/u][/list][/img][/img][/flash]

时间: 2024-08-03 16:17:13

spring AOP的事务顺序问题的相关文章

求大神帮忙 spring aop 方式事务不回滚怎么搞?

问题描述 求大神帮忙 spring aop 方式事务不回滚怎么搞? spring 版本 4.1.7 代码如下: 表: CREATE TABLE users (id int(11) unsigned NOT NULL AUTO_INCREMENT,nick_name varchar(100) DEFAULT NULL,password varchar(100) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAU

spring事务-spring AOP 拦截器方式配置事务失效

问题描述 spring AOP 拦截器方式配置事务失效 Spring.xml配置如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:conte

s2sh框架搭建(基于spring aop)

对于spring aop 是如何管理事务的,请看一下:http://bbs.csdn.net/topics/290021423 1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3

Spring AOP从入门到放弃之概念以及Spring Boot AOP demo

本文小福利 点我获取阿里云优惠券 AOP核心概念 1.横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点 2.切面(aspect)->(通知+切点) 类是对物体特征的抽象,切面就是对横切关注点的抽象. 通知+切点 意思就是所有要被应用到增强(advice)代码的地方.(包括方法的方位信息) 3.连接点(joinpoint)->(被拦截的方法) 被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截的方法,实际上连接点还可以是字段或

Spring AOP详解(http://sishuok.com/forum/posts/list/281.html)

三6.5  AspectJ切入点语法详解 6.5.1  Spring AOP支持的AspectJ切入点指示符        切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下:          execution:用于匹配方法执行的连接点:          within:用于匹配指定类型内的方法执行:          this:用于匹配当前AOP代理对象类型的执行方法:注意是AOP代理对象的

spring mvc+hibernate4事务控制

问题描述 spring mvc+hibernate4事务控制 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://

J2EE中使用Spring AOP框架和EJB组件

j2ee 快速发展的开发人员社区.对各种后端技术(包括JMS.JTA.JDO.Hibernate.iBATIS等等)的支持,以及(更为重要的)非侵入性的轻量级IoC容器和内置的AOP运行时,这些因素使得Spring Framework对于J2EE应用程序开发十分具有吸引力.Spring托管的组件(POJO)可以与EJB共存,并允许使用AOP方法来处理企业应用程序中的横切方面--从监控和审计.缓存及应用程序级的安全性开始,直到处理特定于应用程序的业务需求. 本文将向您介绍Spring的AOP框架在

浅析Spring提供的事务管理方法

Spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:而声明式的比编程式的更灵活方便.本文将讨论这两种事务管理的区别. 传统的JDBC事务管理 以往使用JDBC进行数据操作时,一般采用DataSource,从数据源中得到Connection,我们知道数据源是线程安全的,而连接不是线程安全的,所以对每个请求都是从数据源中重新取出一个连接.一般的数据源由容器进行管理,包括连接池.例如TOMCAT,WEBSPHERE,WEBLOGIC等这些

spring AOP的方式监控方法的执行时间

前段时间有几个同行跟我吐槽说系统响应越来越慢,优化不知道从何入手!今天写写使用spring的aop来实现方法级的执行时间的记录监控,以此来评估方法的性能以及针对性的对已存在的方法进行优化. 对于监控,我们比较关注监控的可靠性和性能,准确,高效,这才能在不影响整体性能的情况下对我们的系统性能有个较准确的认识. 对于spring aop这个我就不多介绍了,网上一搜一大把,使用过spring的人都知道spring的ioc和aop.ioc我们常用,但在我们自己的系统中,aop的使用几乎为零,除了这个监控