1 功能简介
在企业级应用领域,事务处理保证了资源操作的ACID属性,比如银行转帐业务。如果没有事务处理,则银行转帐业务一旦失败,其后果是不堪想象的。
2 事务处理方式
Spring提供了Annotation和XML配置方式的声明式事务管理以及更易于使用的编程式事务管理。以下介绍这两种方式的各自特点,以及如何选择适当的事务配置方式。
2.1 Annotation事务处理
2.1.1 配置事务
Spring支持Annotation风格的声明式事务。直接在Java源代码中声明事务语义的做法让事务声明和将受其影响的代码距离更近了,而且一般来说不会有不恰当的耦合的风险,因为,使用事务性的代码几乎总是被部署在事务环境中。
Annotation是通过使用@Transactional来表示:
@Transactional(propagation=Propagation.REQUIRED)
public void insert(User user){
……
}
@Transactional(readOnly=true)
public void find(Integer id){
……
}
@Transactional注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上(方法级别注解的事务设置将优先于类级别注解的事务设置)。然而,@Transactional注解的出现不足于开启事务行为,它仅仅 是一种元数据(如:“当一个方法开始调用时就开启一个新的只读事务,并停止掉任何现存的事务”。),还需要在配置文件中,加上相应的namespace配置后,只需配置
正是元素的出现 开启 了事务行为。
另外建议在具体的类(或类的方法)上使用@Transactional注解,而不要使用在类所要实现的任何接口上。如果在接口上使用@Transactional注解,这将只能当设置了基于接口的代理时它才生效。因为注解是不能继承的,这就意味着如果正在使用基于类的代理时,那么事务的设置将不能被基于类的代理所识别,而且对象也将不会被事务代理所包装(将被确认为严重的)。
2.1.2 事务回滚异常定义
默认的@Transactional有关设置如下:
事务传播设置是 PROPAGATION_REQUIRED
事务隔离级别是 ISOLATION_DEFAULT
事务是 读/写
事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚,除非你特别声明。
这些默认的设置是可以被改变的。
******************************************************
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW,
rollbackFor = {MyException1.class,MyException2.class})
属性rollbackFor配置遇到MyException1.class和MyException2.class异常类,事务回滚。
Annotation
优点:比较灵活,在一个类中,可以任意选择指定哪些方法需要事务。
缺点:事务定义分散在源代码中,没有一个统一的事务切面视图。修改事务定义,需要修改源代码。
2.2 配置事务处理
2.2.1 配置事务
配置文件中几种常见的配置方式及各自的优缺点。
方法一:BeanNameAutoProxyCreator
优点:有大量bean声明性事务管理时使用该方法可以简化配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dt/spring-beans.dtd">
Exploring spring Dependency Injection feature
hibernate.cfg.xml
<!-- Transaction Interceptor set up to do PROPOGATION_REQUIRED on all methods -->
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED
true
userDocumentManager
docsrv.conf
<!-- contextPath is which url path the document server resides, KEEP it sync with actual deployment -->
/axis
<!--DAO classes definition begin-->
<!--DAO classes definition end-->
<!-- Service definition begin -->
<!-- Service definition end -->
但使用该方法配置时需要多配置一个xxxTarget的bean,该bean通常在应用用没有直接的用途,使得配置显得比较累赘。这一问题在spring中也可以用嵌套的bean来解决。也就是将名为xxxTarget的bean直接写道被引用到的地方。按此方法,上例可以改成:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
Exploring spring Dependency Injection feature
hibernate.cfg.xml
docsrv.conf
<!-- contextPath is which url path the document server resides, KEEP it sync with actual deployment -->
/axis
<!--DAO classes definition begin-->
<!--DAO classes definition end-->
<!-- Service definition begin -->
just.docserver.UserDocumentManager
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED
<!-- Service definition end -->
这样整个配置更为简洁清晰,而且更适合于代码生成工具来生成这些配置,提高开发效率。
总结:
归纳了事务配置的几种方式,BeanNameAutoProxyCreator,TransactionProxyFactoryBean即TransactionProxyFactoryBean加嵌套式Target bean。方法一适用于有大量bean需要声明性事务配置的情形。方法二、三配置更加灵活。方法三比方法二更加简洁、紧凑,十分适用于代码生成。另外,方法有个缺点,如果bean实现某些接口,使用方法一无法指定对这些接口进行截获(利用ProxyFactoryBean的proxyInterfaces属性),从而无法使用JDK的动态代理,只能使用CGLIB来实现方法截获。
分享到:
相关推荐
3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...
2. Hibernate事务管理:使用`HibernateTransactionManager`结合SessionFactory进行事务控制。 3. AOP(面向切面编程)在事务管理中的应用:`TransactionInterceptor`基于AOP拦截方法调用,处理事务。 4. 配置事务...
【hibernate事务管理机制】是指在使用Hibernate框架进行数据库操作时,如何管理和协调事务的一系列规则和策略。事务管理是确保数据一致性、完整性和并发控制的重要机制。 **悲观锁**是预防性的锁定策略,它假设并发...
**Hibernate事务管理详解** 在Java开发中,尤其是在企业级应用中,事务管理是不可或缺的一部分。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了强大的事务处理能力。本篇文章将深入探讨Hibernate中的事务...
### 详解Hibernate事务处理机制 #### 一、引言 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的...
本文将深入探讨Spring与Hibernate整合时的事务管理,帮助你更好地理解和运用这些技术。 首先,Spring框架是Java企业级应用的基石,它提供了一种依赖注入(Dependency Injection,DI)的方式,使得组件之间的耦合度...
一、Hibernate事务管理 在数据库操作中,事务确保了数据的一致性和完整性。Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化...
在Spring框架中集成和配置Hibernate事务管理是企业级Java应用中的常见实践,它能提供高效且灵活的事务处理策略。Spring作为一款强大的依赖注入(DI)和面向切面编程(AOP)容器,能够轻松地管理和协调不同数据访问...
本文将深入探讨Hibernate中的事务和并发控制,这对于开发高效、稳定的数据库应用至关重要。 首先,我们来理解Hibernate中的事务管理。在数据库操作中,事务是保证数据一致性的重要手段。一个事务包含了一组数据库...
在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...
**JDBC与Hibernate事务详解** 在Java开发中,数据库事务管理是确保数据一致性、完整性和原子性的重要机制。本讲解将深入探讨JDBC(Java Database Connectivity)和Hibernate两种不同的技术在处理事务时的方法和特点...
Hibernate 事务管理是 ORM 框架中的重要组成部分,它负责确保数据操作的一致性和完整性。在 Hibernate 中,事务管理可以基于 JDBC Transaction 或 JTA (Java Transaction API) 进行,这两种方式各有特点。 首先,...
2. **Hibernate事务**: Hibernate本身也提供了一种事务管理机制,但在Spring环境中,我们通常使用Spring的事务管理器来协调。当@Transactional注解应用于方法上,Spring会在该方法执行前后自动管理事务的开始和结束...
在Spring框架中配置Hibernate事务管理是一项关键任务,它允许开发者以声明式的方式处理数据库操作的事务性,确保数据的一致性和完整性。以下是如何在Spring中配置Hibernate事务的详细步骤和概念解释。 首先,理解...
"Hibernate事务控制"主要关注在Hibernate中如何管理和协调事务,以满足ACID原则,即原子性、一致性、隔离性和持续性。 首先,事务是数据库操作的基本单元,它确保一系列数据库操作要么全部成功,要么全部回滚。原子...
本篇文章将深入探讨如何在Spring AOP中实现Hibernate事务管理,以及这一过程中的关键概念和技术细节。 首先,让我们了解什么是Spring AOP。AOP是一种编程范式,它允许程序员定义“切面”,这些切面是跨越多个对象的...
在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...
### Hibernate事务处理详解 #### 一、事务处理概念与特性 事务处理是数据库操作中一个核心的概念,尤其在处理复杂的业务逻辑时,确保数据的一致性和完整性至关重要。Hibernate作为Java领域中广泛使用的对象关系...