我是一个spring 学习的初手, 在学习spring in action这本书的 事务自动代理 章节时,按照所说的方式,我先配置了一个自动代理和事务属性源advisor,如下:
<bean id="autoproxy"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
</bean>
<bean id="transactionAdvisor"
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<constructor-arg>
<ref bean="tranInterceptor" />
</constructor-arg>
</bean>
<bean id="tranInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="hibernateTranManager" />
</property>
<property name="transactionAttributeSource">
<ref bean="tranAttribute1" />
</property>
</bean>
而后,我配置属性源,书上说有两种方式位自动代理选择一个属性源
一:
<bean id="tranAttribute1"
class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
<property name="properties">
<props>
<prop key="insertPerson">
PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,-PersonException
</prop>
</props>
</property>
</bean>
在我的测试代码中,事务是可以回滚的,也就是说,-PersonException是起作用的,测试代码我贴上部分
public void insertPerson(final Person p) throws PersonException{
getHibernateTemplate().save(p);
throw new PersonException();
}
但是,当我按照第二种方式配置属性源,则,没有预期的产生事务回滚:
<bean id="tranAttribute2"
class="org.springframework.transaction.interceptor.MethodMapTransactionAttributeSource">
<property name="methodMap">
<map>
<entry key="com.dao.PersonDao1.insertPerson">
<value>
PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,-PersonException </value>
</entry>
</map>
</property>
</bean>
PS:用第二种属性源测试的时候,我上述拦截器tranInterceptor的transactionAttributeSource我换成了tranAttribute2的。
期望达人能帮小弟解决这个学习上的疑惑
谢谢
PS:此问题已经解决
问题的原因是:
<entry key="com.dao.PersonDao1.insertPerson">
<value>
PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,-PersonException </value>
</entry>
中的 <entry key="com.dao.PersonDao1.insertPerson">中的 key属性要是接口,而不是实际类
分享到:
相关推荐
总之,这个“spring简单实例 事务回滚”案例为我们提供了一个学习Spring事务管理的好起点。通过理解如何配置事务管理器,使用`@Transactional`注解,以及异常处理机制,我们可以更好地掌握Spring如何保证数据的一致...
7. **实现事务回滚**:当在@Transactional注解的方法中发生异常时,Spring会自动回滚事务。例如,如果在保存数据时发生错误,整个事务将被回滚,保证数据的一致性。 8. **测试与调试**:完成整合后,通过编写单元...
在Spring框架中,事务管理是核心特性之一,用于确保数据操作的一致性和完整性。当一个方法(A方法)内部调用另一个方法(B方法)时,可能会遇到事务控制...这个示例代码对于理解和调试Spring事务管理的问题非常有帮助。
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
- 提供了跨数据源的事务回滚能力,简化了系统设计,降低了处理多数据源时的复杂性。在除了分布式事务外的大多数情况下,只需考虑这个机制,就能保证事务的正确性。 在多租户SaaS架构中,数据隔离至关重要。常见的...
如果方法执行过程中发生异常,代理对象会触发事务回滚。 五、事务回滚的局限性 需要注意的是,`@Transactional`注解只能对Spring管理的bean起作用,对于非Spring管理的对象(如静态方法或第三方库的代码),`@...
我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,Spring事务管理有编程式和声明式两种方式。编程式事务管理通过`PlatformTransactionManager`接口和`TransactionDefinition`接口来实现...
#### Spring事务控制的基础概念 Spring框架支持两种类型的事务管理:编程式事务管理和声明式事务管理。 - **编程式事务管理**:通过编码的方式来管理事务,适用于需要细粒度控制的情况。 - **声明式事务管理**:...
### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...
本文将深入探讨在"spring事务操作试验"中涉及的关键知识点,并结合提供的资源进行详细阐述。 首先,Spring事务管理的核心概念是ACID(原子性、一致性、隔离性和持久性),这是所有事务系统的基础。在Spring中,事务...
在`first_maven_project`中,我们可以通过查看源码,了解如何在实际应用中使用这个注解来处理事务,以及遇到异常时如何触发事务回滚。这有助于理解Spring事务管理机制的运作方式,从而提升开发和维护效率。
Spring事务管理还支持编程式事务管理,但这需要开发者手动调用`TransactionTemplate`或`PlatformTransactionManager`来控制事务的开始、提交、回滚等操作,相对而言更复杂,但在某些特定场景下更有灵活性。...
Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...
Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。在Spring中,事务管理分为编程式和声明式两种方式。本篇文章将详细解释Spring事务管理的流程,以及如何通过时序图来理解这一...
### Spring中事务的传播属性详解 #### 一、引言 在使用Spring框架进行应用程序开发时,事务管理是一项非常重要的特性。Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理因其...
2. **PlatformTransactionManager**: 这是Spring事务管理的顶级接口,提供了开始、提交、回滚事务的方法。根据底层数据源,如JDBC、Hibernate、JPA等,会有不同的实现,如DataSourceTransactionManager、...
Spring事务管理是企业级Java应用中不可或缺的一部分,它确保了数据的一致性和完整性,尤其是在多线程和分布式环境中。本实例将深入探讨Spring事务管理的实现与应用。 首先,Spring事务管理分为编程式事务管理和声明...
在类上直接使用 @Transactional 注解,Spring 会创建基于类的代理,但是这种方式可能导致一些问题,例如:无法通过子类覆盖父类的方法来改变事务属性。 第五种方式:编程式事务管理 除了声明式事务管理,Spring 还...
6. **事务回滚规则**: 默认情况下,如果在事务回调中抛出未检查异常(继承自`RuntimeException`)或`Error`,Spring会自动回滚事务。对于已检查异常,需要显式设置`rollbackFor`属性,或在`TransactionCallback`中...
- 回滚规则:默认情况下,只有运行时异常会导致事务回滚,检查异常不会。可以通过`rollbackFor`或`noRollbackFor`属性自定义。 总结来说,本例子通过`TransactionProxyFactoryBean`和`@Transactional`展示了如何在...