`

spring 事务管理配置

阅读更多
2011-03-24
Spring3.0中的事务控制的配置方法
文章分类:Java编程
第一种配置方法:基于XML的事务管理
这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpdate等等。详细配置如下:

Xml代码 
1. 
2.<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同  
3.    比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager  
4. --> 
5.<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
6.    <property name="dataSource" ref="dataSource"></property> 
7.</bean> 
8. 
9.<!-- 定义事务通知 --> 
10.<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
11.    <!-- 定义方法的过滤规则 --> 
12.    <tx:attributes> 
13.        <!-- 所有方法都使用事务 --> 
14.        <tx:method name="*" propagation="REQUIRED"/> 
15.        <!-- 定义所有get开头的方法都是只读的 --> 
16.        <tx:method name="get*" read-only="true"/> 
17.    </tx:attributes> 
18.</tx:advice> 
19. 
20.<!-- 定义AOP配置 --> 
21.<aop:config> 
22.    <!-- 定义一个切入点 --> 
23.    <aop:pointcut expression="execution (* com.iflysse.school.services.impl.*.*(..))" id="services"/> 
24.    <!-- 对切入点和事务的通知,进行适配 --> 
25.    <aop:advisor advice-ref="txAdvice" pointcut-ref="services"/> 
26.</aop:config> 

<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 定义事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 定义方法的过滤规则 -->
<tx:attributes>
<!-- 所有方法都使用事务 -->
<tx:method name="*" propagation="REQUIRED"/>
<!-- 定义所有get开头的方法都是只读的 -->
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>

<!-- 定义AOP配置 -->
<aop:config>
<!-- 定义一个切入点 -->
<aop:pointcut expression="execution (* com.iflysse.school.services.impl.*.*(..))" id="services"/>
<!-- 对切入点和事务的通知,进行适配 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="services"/>
</aop:config>第二中配置方法:基于@Transactional的事务管理
这种方法,只需要在Spring配置文件中定义一个事务管理对象(如DataSourceTransactionManager),然后加入<tx:annotation-driven/>节点,引用该事务管理对象,然后即可在需要进行事务处理的类和方法使用@Transactional进行标注。示例如下:

Spring配置XML文件

Xml代码 
1.<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同  
2.    比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager  
3. --> 
4.<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
5.    <property name="dataSource" ref="dataSource"></property> 
6.</bean> 
7.<!-- 声明使用注解式事务 --> 
8.<tx:annotation-driven transaction-manager="transactionManager"/> 
<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 声明使用注解式事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>Java代码中@Transactional示例

Java代码 
1./** 
2. * @author ZYWANG 2011-3-24 
3. */ 
4.@Service 
5.@Transactional(propagation = Propagation.REQUIRED)  
6.public class TeacherServicesImpl implements TeacherServices {  
7.    @Autowired 
8.    TeacherDao dao = null;  
9. 
10.    public TeacherDao getDao() {  
11.        return dao;  
12.    }  
13. 
14.    public void setDao(TeacherDao dao) {  
15.        this.dao = dao;  
16.    }  
17. 
18.    @Override 
19.    @Transactional(readOnly=true,propagation=Propagation.NEVER)  
20.    public List<Teacher> getAllTeachers() {  
21.        return getDao().getAllTeachers();  
22.    }  
23. 
24.    @Override 
25.    public void addTeacher(Teacher teacher) {  
26.        if(teacher.getId() > 0){  
27.            getDao().updateTeacher(teacher);  
28.        }else{  
29.            getDao().addTeacher(teacher);  
30.        }  
31.    }  
32.} 
/**
* @author ZYWANG 2011-3-24
*/
@Service
@Transactional(propagation = Propagation.REQUIRED)
public class TeacherServicesImpl implements TeacherServices {
@Autowired
TeacherDao dao = null;

public TeacherDao getDao() {
return dao;
}

public void setDao(TeacherDao dao) {
this.dao = dao;
}

@Override
@Transactional(readOnly=true,propagation=Propagation.NEVER)
public List<Teacher> getAllTeachers() {
return getDao().getAllTeachers();
}

@Override
public void addTeacher(Teacher teacher) {
if(teacher.getId() > 0){
getDao().updateTeacher(teacher);
}else{
getDao().addTeacher(teacher);
}
}
}

个人认为第一中方式的配置的侵入性低多了,写程序时只需要关注业务和命名规范,不需要考虑事务处理;第二种方式的配置可以更加灵活的使用事务,个性化定制。


以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》

文章来源:http://zywang.iteye.com/blog/974331
分享到:
评论

相关推荐

    Spring事务管理配置

    在深入探讨Spring事务管理配置之前,我们先简要回顾一下Spring框架的核心概念。Spring是一个开源的Java平台,它提供了一套全面的编程和配置模型,旨在简化企业级应用的开发。其中,事务管理是Spring框架中的一个重要...

    Spring事务管理Demo

    Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...

    Spring事务管理配置文件问题排查

    如果未回滚,可能是因为事务管理配置有误,或者事务管理被错误地关闭了。 为了彻底解决问题,首先检查事务管理的配置文件,确认`&lt;tx:annotation-driven&gt;`元素已经正确配置,同时检查数据库连接池配置,确保事务管理...

    Spring事务管理开发必备jar包

    本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...

    spring3.0两种事务管理配置

    Spring 3.0 事务管理配置 Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML ...

    Spring事务管理的jar包

    本篇将深入探讨Spring事务管理的核心概念、工作原理以及如何使用`spring-tx-3.2.0.RELEASE.jar`这个jar包。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组操作,这些操作被视为一个整体,要么全部完成...

    spring 事务管理的理解

    Spring 框架是Java开发中...理解并熟练掌握Spring事务管理,对于提升应用程序的稳定性和可靠性至关重要。在实际开发中,结合声明式事务管理、事务传播行为、隔离级别和回滚规则,可以有效地确保数据的完整性和一致性。

    Spring事务管理失效原因汇总

    总结来说,Spring事务管理失效的原因是多方面的,涵盖从代理模式原理到AOP的实现细节,再到异常处理机制,以及事务传播和隔离级别的配置等多个层面。开发者需要深入理解Spring框架的内部机制,才能在实际开发中有效...

    spring事务管理

    ### Spring事务管理详解 #### 一、Spring事务管理概述 Spring框架提供了强大的事务管理功能,使得开发者能够更方便地管理应用程序中的事务。Spring事务管理主要包括两种类型:编程式事务管理和声明式事务管理。 -...

    spring事务管理5种方法

    本篇文章将深入探讨Spring事务管理的五种方法,旨在帮助开发者更好地理解和运用这一核心特性。 首先,我们来了解什么是事务。在数据库操作中,事务是一组逻辑操作,这些操作要么全部成功,要么全部失败,确保数据的...

    实验 spring 声明事务

    实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...

    spring事务操作试验

    首先,Spring事务管理的核心概念是ACID(原子性、一致性、隔离性和持久性),这是所有事务系统的基础。在Spring中,事务管理分为两种模式:声明式事务管理和编程式事务管理。声明式事务管理通过配置元数据(如XML或...

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。

    Spring事务原理、Spring事务配置的五种方式

    Spring事务管理创造性的解决了很多以前要用重量级的应用服务器才能解决的事务问题,那么其实现原理一定很深奥吧?可是如果读者仔细研究了Spring事务管理的代码以后就会发现,事务管理其实也是如此简单的事情。这也...

    spring事务与数据库操作

    - **配置事务管理器**:接下来,需要配置一个事务管理器(如`DataSourceTransactionManager`),它负责管理事务的开始、提交和回滚。 - **配置事务规则**:最后,需要配置事务规则,指定哪些方法需要在事务中执行。 ...

    spring的事务管理配置

    spring的事务管理配置详解.txt详细的描述了如何配置spring的事物。

    spring事务配置的五种方式

    1. **基于XML的全局事务配置**:这种方式通过在Spring配置文件中设置`&lt;tx:advice&gt;`和`&lt;aop:config&gt;`元素来实现事务管理。相比于第一种方式,这种方式更加简洁,适用于所有业务逻辑Bean。 2. **基于注解的事务配置**...

    Spring的事务管理小案例

    在本文中,我们将深入探讨Spring框架中的事务管理。Spring是一个广泛应用的Java企业级应用开发框架,它提供...如果你想要深入了解,可以参考提供的博客链接或其他相关资料,进一步学习Spring事务管理的细节和最佳实践。

    spring_事务管理(实例代码)

    Spring事务管理就是围绕这些特性来确保数据的一致性。 四、事务的传播行为 在Spring中,我们可以配置事务的传播行为,比如REQUIRED(默认,如果当前存在事务,则加入当前事务,否则新建一个事务)、PROPAGATION_...

Global site tag (gtag.js) - Google Analytics