-
Spring Mybaties事务的困惑!求解!!5
Spring对service事务的配置
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="query*" propagation="REQUIRED" read-only="true" />
<tx:method name="list*" propagation="REQUIRED" read-only="true" />
<tx:method name="search*" propagation="REQUIRED" read-only="true" />
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="*" propagation="SUPPORTS" /><!--规定当前方法支持当前事务处理,但如果没有事务在运行就使用非事务方法执行 -->
</tx:attributes>
</tx:advice>
CustomerService有Add()方法,
public Customer add(Customer t) {
customerDao.save(t);
if(customerQuery.getCustomerName().equals("AAAA")){
throw new NullPointerException("到底回滚不?");
}
t.setCustomerName("Super Test");
customerDao.update(t);
return t;
}
问题:如果增加一个Customer,customerName属性是"BBBB",那么数据库会增加一条customerName属性是"Super Test"的数据,
如果增加一个Customer,customerName属性是"AAAA",以我的理解既然add的事务级别是propagation="SUPPORTS",那么在抛出异常之前应该已经保存了“AAAA”数据,但实际情况是没有保存数据直接回滚了,
这是为什么呢?
问题补充:我的问题在于,customerName等于AAAA的时候,由于save后抛出了异常,即没save也没update。
我觉得应该save不update,也就是数据库表里应有一条AAAA的数据,只是没有update成为Super Test
问题补充:我说的save不是调用的service的方法,而是调用的dao的save方法,service的增加方法叫Add,难道因为dao的新增方法叫save所以就有事务了?????????????
问题补充:即使我再事务配置中只要这一个<tx:method name="*" propagation="SUPPORTS" />,CustomerService的Add方法在调用customerDao.add();后抛出一个异常,他怎么就回滚不保存了!
这不就和SUPPORTS<!--规定当前方法支持当前事务处理,但如果没有事务在运行就使用非事务方法执行 --> 的描述不一样了吗? 这里的事务是怎么来的?2014年5月30日 09:02
5个答案 按时间排序 按投票排序
-
采纳的答案
<tx:method name="*" propagation="SUPPORTS" />
SUPPORTS声明业务方法不需要事务,如果业务方法执行时已经在一个事务中,则事务被挂起,等方法执行完毕后,事务恢复进行;所以无论你的方法会不会抛出异常,都不会有事务的操作,也就是你对数据库的更新操作都不会生效,因为没有事务,自然不会有事务的提交了,至于回滚就更谈不上了。2014年5月30日 12:08
-
首先你要明白事务REQUIRED是当前有事务就加入,没就新建一个,你这save与update在同一事务里,所以都回滚。
要想达到你想的那就效果(save ROLLBACK, update COMMIT),就新开事务,给update配成REQUIRES_NEW,放在2个service里。2014年6月03日 11:18
-
我来救你吧
首先你需要把你定义的事物范围贴出来,这么关键的东西不贴出来,别人也能帮你分析,我真的很惊讶。
假设你的范围是这样定义的。(假设定义到你的CustomerService这个类上面)
<aop:pointcut id="allTestServiceMethod" expression="execution(* CustomerService.*.*(..))"/>
也就是你的add方法已经是一个被代理的方法了,SPRING会把事物上下文放到当前线程里面去,然后进入你的add方法,然后里面所有针对数据库的操作底层都是一个connection,所以无论在这个方法上面地方抛出异常都必将会滚2014年6月01日 11:00
-
你的事务管理器应该是配到service这一层的吧,这要save update这两个方法用的是同一个事务了啊,那肯定要么同事成功,要么同时失败。
2014年5月30日 15:28
-
customerName等于AAAA的时候,你If语句块里面都直接抛出异常了,
下面的代码就不走了,update方法都没走,你哪来的事务操作?哪来的回滚?2014年5月30日 09:57
相关推荐
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
在Spring框架中,事务管理是核心特性之一,它允许开发者以声明式或编程式的方式处理应用中的事务。Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何...
在事务管理方面,Spring2.5提供了声明式事务管理,通过`@Transactional`注解可以轻松地在方法级别指定事务属性。这极大地降低了事务管理的复杂性,让开发者能够专注于业务逻辑。 Spring2.5还加强了与Web应用程序的...
从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建
20道顶尖的Spring Boot面试题!
在这种情况下,我们可以利用Spring的IoC来管理不同的组件(如CustomerService、CustomerRepository等),并通过AOP来实现日志记录和事务管理等功能。具体来说: 1. **组件定义**:使用Spring管理CustomerService和...
Spring Boot 2.5.1 发布!我真跟不上了。。。(csdn)————程序
7. **Spring Boot**:虽然这个压缩包不直接包含Spring Boot内容,但Spring 4.3.0是Spring Boot早期版本的基础,Spring Boot简化了Spring应用的启动和配置,引入了“起步依赖”概念,使得快速开发成为可能。...
接下来,我们需要配置Spring的`applicationContext.xml`,声明数据源、事务管理器以及Mybatis的SqlSessionFactory。这里我们使用 Druid 数据源,因为它提供了强大的监控功能: ```xml <!-- 数据源属性配置 --> ...
2. **MyBatis的事务管理**:Spring可以提供全局的事务管理,通过AOP代理实现事务的回滚和提交,保证数据的一致性。 3. **Service层和DAO层**:在SpringMVC的Controller中,通过@Autowired注解可以方便地注入Service...
2. **事务管理**:Spring可以提供声明式事务管理,使得在Controller层无需手动处理事务,提高了代码的可维护性。 3. **AOP(面向切面编程)**:Spring的AOP功能可用于实现通用的日志记录、性能监控等功能,减少重复...
本教程将深入探讨如何在Spring4、SpringMVC和MyBatis集成环境下实现事务控制。 首先,让我们了解这三个组件的基本概念: 1. **Spring4**:Spring是一个开源的Java平台,它提供了全面的企业级应用开发解决方案,...
Spring事务操作示例(四种方式),包含完整代码和数据库文件(基于MySQL,在项目sql文件夹中),可运行,学习Spring事务详见博客:http://blog.csdn.net/daijin888888/article/details/51822257
在Java企业级应用开发中,Spring框架以其强大的功能和灵活性被广泛应用,特别是在事务管理方面。Spring提供了全面的事务管理解决方案,使得开发者可以方便地控制事务的边界,保证数据的一致性和完整性。本篇将深入...
基于Spring和MyBaties的会议室管理系统设计源码,该项目共有210个文件,主要文件类型包括42个class字节码文件,42个jar打包文件,34个xml配置文件,26个html页面文件,21个java源文件,12个png图像文件,8个css样式...
spring事务的底层实现流程图 spring事务的底层实现流程图 spring事务的底层实现流程图 spring事务的底层实现流程图 spring事务的底层实现流程图 spring事务的底层实现流程图 spring事务的底层实现流程图 spring事务...
此外,Spring还提供AOP(面向切面编程)功能,用于处理如日志、事务管理等横切关注点。 2. **Spring MVC**:Spring MVC是Spring框架的一个模块,用于处理Web请求。它负责接收HTTP请求,调用业务逻辑,处理结果,并...
spring事务控制jar包,请网上自寻下载
Java、Spring、SpringMVC、MyBatis以及BootStrap是现代Web开发中常用的技术栈,它们各自在软件开发的不同层面发挥着重要作用。下面将详细解释这些技术的特性和应用场景。 1. Java:Java是一种多平台的、面向对象的...