对于Spring的一个注册容器相当于一个事务,所以其中的方法调用
都在一个事务当中。
对于Spring注册的容器才能使用事务
对于事务Propagation.REQUIRED是将注册方法的事务加入到调用者的事务当中形成一个事
务;Propagation.REQUIRES_NEW是将注册方法的事务执行完毕后再执行调用者的事务,是两个事务。
示例:
容器A中
@Transactional(rollbackFor=MyException.class,
propagation=Propagation.REQUIRES_NEW)
public void test() throws MyException {
Project p = new Project();
p.setName("service tran1");
dao.save(p);
service.test();
---------------调用容器B的test()
}
容器B中
@Transactional(rollbackFor=MyException.class, propagation=
Propagation.REQUIRED)
public void test() throws MyException {
Project p = new Project();
p.setName("service2 tran1");
dao.save(p);
throw new MyException();
}
当B的事务申明为 propagation=
Propagation.REQUIRED时,B的事务加入到A形成一个事务,所以B检查到需要回滚后,这个新形成的事务回滚,A的数据也没有保存。
如果B的事务申明为propagation=Propagation.REQUIRES_NEW,那么B的事务是先commit再执行A的事务,那
么A的数据依然保存。
以下是载录网上内容:
Spring annotation对事务的管理
用 spring
事务管理器,由spring
来
负责数据库的打开,提交,回滚.默认遇到运行期例外
(throw new RuntimeException("注释");)会回滚:unchecked,需要捕获的例外(throw
new Exception("注释");)不会回滚:checked.
需要修改规则加入注释:
@Transactional(rollbackFor=Exception.class) //指定回滚,需要捕获的例外(throw
new Exception("注释");)不会回滚
public void methodName() {
throw new Exception("注释");
}
@Transactional(noRollbackFor=Exception.class)// 指定不回滚,遇到运行期例外
(throw new RuntimeException("注释");)会回滚
public ItimDaoImpl getItemDaoImpl() {
throw new RuntimeException("注释");
}
//事务传播属性
@Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事
务,没有的话 新建一个(不写的情况下)
@Transactional(propagation=Propagation.NOT_SUPPORTED) //容器不为这个方法
开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务,
都创建 一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.MANDATORY) //必须在一个已有的事务中
执行,否则 抛出异常
@Transactional(propagation=Propagation.NEVER) //必须在一个没有的事务中执
行, 否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS) //如果其他bean调用这个方
法,在其 他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
/*public void methodName(){
update();//本类的修改方法 1
otherBean.update();//调用其他类的修改方法
update();//本类的修改方法 2
}
other失败了不会影响 本类的修改提交成功
本类update的失败,other也失败
*/
@Transactional(propagation=Propagation.NESTED)
@Transactional (propagation =
Propagation.REQUIRED,readOnly=true) //readOnly=true只读,不能更新,删除
@Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间
@Transactional (propagation =
Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置 数据库隔离级别
分享到:
相关推荐
【Spring Annotation简介一】 在Java开发领域,Spring框架以其强大的功能和灵活性深受广大开发者喜爱。Spring Annotation是Spring框架中的一个重要特性,它极大地简化了配置,提高了代码的可读性和可维护性。这篇...
- `@DataJpaTest`: 针对Spring Data JPA的测试,包括事务管理。 - `@MockBean`: 在测试上下文中创建一个mock bean,替代真实的bean。 - `@Import`: 引入额外的配置类到测试上下文。 Spring注解的使用大大减少了...
Spring Annotation 注解 Spring 框架中的注解是用于在 Java 类中添加元数据的,通过这些元数据,Spring 框架可以在运行时提供更多的功能。 Spring 框架提供了多种类型的注解,例如 @Autowired、@Resource、@...
### Spring的Annotation方式详解 #### 引言 随着Spring框架的发展,其依赖注入(DI)机制也经历了从XML配置向注解驱动的重大转变。自Spring 3.0版本起,框架引入了一系列注解来简化依赖配置,使得开发人员能够在不...
### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...
Spring 的 Annotation-Driven 配置事务管理器详解(多数据源配置) Spring 框架提供了强大的事务管理机制,通过使用 Annotation-Driven 配置,可以方便地管理事务。在多数据源配置中,spring 的 Annotation-Driven...
在Spring框架中,Annotation配置是一种简洁且强大的方式来管理Bean的定义和依赖注入,它消除了传统的XML配置文件,使得代码更加简洁、易读。在Spring 3.0及以上版本中,Annotation配置得到了广泛的应用。 首先,...
花了些时间做了一个实验,彻底弄懂了spring Annotation注入的方式。凡带有@Component,@Controller,@Service,@Repository 标志的等于告诉Spring这类将自动产生对象,而@Resource则等于XML配置中的ref,告诉spring此处...
面向切面编程是一种编程范式,它允许我们将关注点(如日志、事务管理等)从主业务逻辑中分离出来,形成独立的“切面”。在Spring框架中,AOP主要通过代理模式实现,可以分为基于XML配置和基于注解两种方式。本例中,...
标题 "SpringIOC_SpringMVC_SpringAnnotation_JPA" 涵盖了四个核心的Java开发框架技术,它们是Spring框架的重要组成部分。Spring框架是一个开源的应用框架,它为Java开发者提供了一个全面的基础设施,用于构建可扩展...
在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
最后,结合`Book1.xlsx`这个文件名,虽然它看起来像一个Excel文件,但在这里没有提供具体的文件内容,所以无法直接关联到Spring事务注解的知识点。通常,这样的文件可能包含有关Spring事务管理的示例数据、测试用例...
3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二.实验内容 (1)使用Spring JDBC实现书店的购书过程,即有如下一个BookShopDao接口...
首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...
本篇文章将深入探讨如何使用Spring的声明式事务,特别是通过Annotation注解方式进行设置。 首先,我们需要理解什么是声明式事务。与编程式事务(即手动编写事务管理代码)不同,声明式事务是通过AOP(面向切面编程...
Spring MVC Annotation验证方法 Spring MVC 框架提供了多种验证方法,其中一种常用的方式是使用Annotation验证。本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和...