package org.springframework.transaction.annotation; import java.lang.annotation.Annotation; import java.lang.annotation.Documented; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Transactional { public abstract Propagation propagation(); public abstract Isolation isolation(); /**该属性用于设置事务的超时秒数,默认值为-1表示永不超时*/ public abstract int timeout(); /**该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。 例如:@Transactional(readOnly=true)*/ public abstract boolean readOnly(); /**该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚.例如: 指定单一异常类:@Transactional(rollbackFor=RuntimeException.class) 指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})*/ public abstract Class<? extends Throwable>[] rollbackFor(); /**该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false. 例如:@Transactional(readOnly=true)*/ public abstract String[] rollbackForClassName(); /**指定不回滚 指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class) 指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})*/ public abstract Class<? extends Throwable>[] noRollbackFor(); /**该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如: 指定单一异常类名称:@Transactional(noRollbackForClassName="RuntimeException") 指定多个异常类名称:@Transactional(noRollbackForClassName={"RuntimeException","Exception"})*/ public abstract String[] noRollbackForClassName(); }
/*@Transactional(propagation=Propagation.NESTED) 的代码解释*/ public void methodName(){ // 本类的修改方法 1 update(); // 调用其他类的修改方法 otherBean.update(); // 本类的修改方法 2 update(); } //other失败了不会影响 本类的修改提交成功 //本类update的失败,other也失败
package org.springframework.transaction.annotation; public enum Isolation { /**使用数据库默认的隔离级别*/ DEFAULT(-1), /**允许读取改变了的还未提交的数据,可能导致脏读'不可重复读和幻读*/ READ_UNCOMMITTED(1), /**允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读*/ READ_COMMITTED(2), /**对相同字段的多次读取结果一致,可导致幻读*/ REPEATABLE_READ(4), /**完全服从ACID的原则,确保不发生脏读、不可重复读和幻读*/ SERIALIZABLE(8); private final int value; private Isolation(int value) { this.value = value; } public int value() { return this.value; } }
package org.springframework.transaction.annotation; public enum Propagation { /**如果有事务,那么加入事务,没有的话新建一个(不写的情况下)*/ REQUIRED(0), /**如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.*/ SUPPORTS(1), /**必须在一个已有的事务中执行,否则抛出异常*/ MANDATORY(2), /**不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务*/ REQUIRES_NEW(3), /**声明方法不需要事务.如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行*/ NOT_SUPPORTED(4), /**必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)*/ NEVER(5), /**如果一个活动的事务存在,则运行在一个嵌套的事务中.如果没有活动事务,则按REQUIRED属性执行.它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点.内部事务的回滚不会对外部事务造成影响.它只对DataSourceTransactionManager事务管理器起效*/ /**如果当前存在一个事务,则该方法运行在一个嵌套的事务中.被嵌套的事务可以从当前事务中单独的提交和回滚.如果当前不存在事务,则开始一个新的事务.各厂商对这种传播行为的支持参差不齐,使用时需注意*/ NESTED(6); private final int value; private Propagation(int value) { this.value = value; } public int value() { return this.value; } }
相关推荐
例如,`<tx:method>`元素可以指定哪些方法需要进行事务处理,以及事务的隔离级别、超时时间等属性。 2. 基于注解的声明式事务管理:Spring支持在方法上使用@Transactional注解来标记需要事务管理的方法。这个注解...
本篇文章将深入探讨Spring事务管理的基础知识、工作原理以及如何在实际项目中应用。 首先,事务是数据库操作的基本单位,它确保了一组操作要么全部成功,要么全部失败,从而保证了数据的完整性和一致性。在Spring中...
通过Spring的事务管理,开发者可以声明式地控制事务边界,使得事务处理更加透明和可靠。同时,Spring的AOP能力也可以用于增强HibernateTemplate,例如添加自定义的后置处理逻辑。 **文件名称列表分析** 由于只有一...
7. **事务管理**:Spring提供声明式事务管理,通过在方法上添加`@Transactional`注解,可以自动处理事务的开始、提交、回滚等操作,降低了事务管理的复杂性。 8. **Spring Boot**:Spring Boot是Spring的简化版本,...
Spring MVC还集成了Spring框架的其他功能,如AOP(面向切面编程)用于实现事务管理、日志记录等。另外,通过ModelAndView对象,可以同时设置模型数据和视图名称,实现灵活的数据传递。 在压缩包“spring_mvc.zip”...
Spring Batch是处理批量操作的模块,它提供了处理大量数据的能力,包括读取、处理和写入数据。 十、Spring Cloud Spring Cloud扩展了Spring Boot,为分布式系统中的服务发现、配置管理、负载均衡等提供了工具集,是...
它支持大量数据的处理,拥有包括日志记录、事务管理、统计作业处理、重新启动和跳过等在内的诸多功能。 由于Spring_Batch是基于Spring框架构建的,它能够使开发者更加容易地使用企业级服务。Spring_Batch提供了高度...
其他的传播行为还有 `PROPAGATION_SUPPORTS`、`PROPAGATION_MANDATORY`、`PROPAGATION_REQUIRES_NEW`、`PROPAGATION_NOT_SUPPORTED`、`PROPAGATION_NEVER` 和 `PROPAGATION_NESTED`,它们分别对应不同的事务处理策略...
3. **AOP(面向切面编程)**:Spring支持AOP,允许开发者定义“切面”,这些切面可以封装横切关注点,如日志记录、事务管理等,使得核心业务代码更简洁。 4. **Spring MVC**:Spring的Model-View-Controller架构...
Spring框架是Java开发中最常用的轻量级开源框架之一,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理以及数据访问等。"spring_api+spring_reference中文版"是一个包含Spring框架API和参考指南的...
总之,Spring AOP是Spring框架中的一个重要特性,它使得开发者能够以声明式的方式处理系统的横切关注点,降低了代码的耦合度,提高了代码的复用性。通过深入理解和实践"spring_aop.rar_spring_aop"中的示例,开发者...
了解Spring框架的基本知识后,我们可以深入探讨如何配置和使用Spring的IoC容器、如何编写面向接口的代码并通过依赖注入实现解耦、如何使用AOP进行横切关注点的处理,如日志记录和事务管理。此外,还可以学习Spring ...
总结来说,`Spring_tx编程式事务代码`主要涉及Spring的`TransactionTemplate`类,它是Spring事务管理的一种便捷工具,可以帮助开发者以编程的方式更加方便地控制事务的生命周期,同时保持代码的简洁和可维护性。...
在SSH(Struts、Spring、Hibernate)经典企业级开发框架中,Spring AOP扮演着至关重要的角色,用于实现如日志记录、事务管理、权限控制等跨切面的关注点。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,...
3. **事务管理**:Spring的事务管理支持可以轻松处理跨多层的事务边界。 4. **可测试性**:由于组件间依赖关系明确,单元测试和集成测试变得更加方便。 文件“iBATIS_Spring_struts_demo”很可能是这个项目的源码包...
Spring 2.0版本在事务处理方面做了许多改进,使得开发者能够更有效地管理应用程序的事务边界。这篇博客将深入探讨Spring 2.0中的事务处理机制,以及如何通过`applicationContext.xml`配置文件来设置和管理事务。 ...
事务处理是软件开发中的关键概念,尤其是在涉及数据库操作的场景下。Spring提供了强大的事务管理功能,可以通过配置式或编程式的方式实现对事务的控制。 #### 实现步骤: 1. **配置事务管理器**:通常在Spring配置...
声明式事务是Spring框架的一大亮点,它允许开发者无需在业务代码中显式处理事务,而是通过配置来控制事务的边界。 首先,我们要理解什么是事务。在数据库操作中,事务是一组原子操作,要么全部完成,要么全部回滚。...
- **事务管理**:利用Spring的事务管理能力,确保服务操作的一致性和原子性。 - **AOP集成**:可以定义切面来处理跨切面的关注点,如日志记录、性能监控等。 为了开始使用"Spring_CXF_Lib",开发者首先需要将压缩包...
Spring事务管理的核心是基于AOP(面向切面编程)的,它可以透明地在业务代码中应用事务控制。Spring支持编程式事务管理和声明式事务管理两种模式。编程式事务管理需要在代码中显式调用begin、commit和rollback等方法...