在Spring中常用的事务传播行为
- PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
- PROPAGATION_SUPPORTS:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。
- PROPAGATION_REQUIRES_NEW:总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
- PROPAGATION_NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务。
- PROPAGATION_NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常。
另外还有PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW两种传播行为,不做介绍。
下面是基于xml的spring事务配置,使用拦截器来实现
配置Spring的事务管理器
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
定义Spring的事务拦截器TransactionInterceptor
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 依赖注入上面定义的事务管理器transactionManager -->
<property name="transactionManager" ref="transactionManager" />
<!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->
<property name="transactionAttributes">
<props>
<!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 -->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
定义要拦截的方法,这里用*表示拦截全部方法
<bean id="trasactionMethodPointcutAdvisor"
class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="mappedNames">
<list>
<value>*</value>
</list>
</property>
<property name="advice">
<ref local="transactionInterceptor"/>
</property>
</bean>
定义拦截的类,这里拦截beanId以Service结尾的类(beanNames,对应xml中的beanId),在这个类中的所有数据库操作都会被视为一个事务
<bean id="ServiceAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass" value="true" />
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>trasactionMethodPointcutAdvisor</value>
</list>
</property>
</bean>
分享到:
相关推荐
这里我们主要探讨的是"Spring基于XML方式配置事务",这涉及到Spring的事务管理器、事务属性以及如何在XML配置文件中定义这些元素。 首先,Spring的事务管理分为两种模式:编程式事务管理和声明式事务管理。编程式...
总结一下,Spring事务管理提供了XML配置和注解两种方式,使得开发者能够灵活地控制事务的边界和行为。XML方式适合于传统应用,而注解方式则更加简洁,易于理解和维护。无论选择哪种方式,Spring事务管理都能帮助我们...
本篇文章将深入探讨Spring事务管理的五种方法,旨在帮助开发者更好地理解和运用这一核心特性。 首先,我们来了解什么是事务。在数据库操作中,事务是一组逻辑操作,这些操作要么全部成功,要么全部失败,确保数据的...
Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML 的事务管理 这种方法不需要...
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
Spring事务管理就是围绕这些特性来确保数据的一致性。 四、事务的传播行为 在Spring中,我们可以配置事务的传播行为,比如REQUIRED(默认,如果当前存在事务,则加入当前事务,否则新建一个事务)、PROPAGATION_...
(2)(2) 在BookShopDao中添加一个purchase购书方法,其操作流程是获取书的单价->买书(更新库存)->更新账户余额,在BookShopDaoImp中实现该方法,并使用基于XML和Annotation的声明式事务管理来确保该购书过程能正常...
Spring框架(基于xml、基于注解、AOP面相切面、事务)思维导图
### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...
在本教程中,我们将深入探讨如何在Java Web开发中整合Spring、Spring MVC和MyBatis框架,特别是关注基于XML配置的Mapper接口方式。这三种技术的集成为开发高效、可维护的Web应用提供了强大支持。 首先,Spring是...
基于XML的声明式事务管理是在Spring的配置文件中使用tx命名空间定义事务切面。例如: ```xml *" propagation="REQUIRED"/> (* com.example.service.*.*(..))"/> ``` 这段配置表示所有在...
本文将详细介绍Spring事务管理的四种方式:编程式事务管理、声明式事务管理、PlatformTransactionManager接口以及TransactionTemplate。 1. **编程式事务管理**:这是一种手动控制事务的方式,通过在代码中调用`...
在XML配置文件中,我们可以使用`<tx:annotation-driven>`元素开启基于注解的事务管理,或者在Java配置类中使用`@EnableTransactionManagement`注解。然后,在需要事务管理的方法上添加`@Transactional`注解,Spring...
这里提到的四个关键配置文件——`spring-mvc.xml`、`spring-mybatis.xml`、`web.xml`以及`log4j.properties`,对于一个基于Java的Web应用来说至关重要,特别是使用Spring MVC和MyBatis框架的时候。接下来,我们将...
### Spring事务管理详解 #### 一、Spring事务管理的重要性及必要性 在现代软件开发中,事务管理是一项至关重要的技术,特别是在涉及数据库操作时。事务能够确保一系列操作要么全部成功,要么全部失败,这对于保持...
当我们谈论"基于xml方式的Spring整合Kafka"时,意味着我们将使用XML配置文件来设置Spring与Kafka的集成。 Spring框架允许开发者通过XML配置来声明式地配置bean,包括数据源、事务管理器、以及与Kafka相关的消费者和...
本文将深入探讨在Spring框架中如何管理事务,以“Spring 事务简单完整例子”为出发点,结合标签“spring,事务,jdbc事务”,我们将详细解释Spring事务管理的原理和实践。 首先,Spring提供了两种事务管理方式:编程...
总之,Spring事务框架提供了一套功能强大、易于使用的事务管理解决方案,它不仅可以减少代码量,提高开发效率,还可以通过声明式配置来提升代码的可读性和可维护性。对于希望深入学习Spring事务管理的开发者而言,...
Spring 支持在 XML 配置文件中使用 `<tx:advice>` 和 `<tx:annotation-driven>` 元素,以及在 Java 配置中使用 `@Transactional` 注解来声明事务。声明式事务管理使得事务管理更加透明,降低了业务代码的复杂性。 ...
#### 一、Spring事务管理概述 Spring框架为开发者提供了一套强大的事务管理机制,它简化了应用程序中的事务控制逻辑,使得开发人员能够更加专注于业务逻辑的编写,而不是繁琐的事务管理代码。Spring支持两种类型的...