<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 装载属性配置文件 -->
<bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:jdbc.properties">
<!-- <list>
<value>classpath:jdbc.properties</value>
</list>
-->
</property>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<!-- 配置事务管理器-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" lazy-init="default">
<property name="dataSource" ref="dataSource"/>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!--
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
-->
<!-- 若方法名不和下边的相同,可以修改。例如:<tx:method name="add*" propagation="REQUIRED"/> -->
<!--
1.事务传播设置是 REQUIRED
2.隔离级别是 DEFAULT
3.事务是 读/写
4.事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
5.任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚
-->
<!--属性的介绍 -->
<!--
propagation属性:事务传播行为REQUIRED
I.PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,
如果存在,加入到这个事务中------->常用
I.PROPAGATION_SUPPORTS:支持当前事务,若没有事务,就以非事务的
方式执行。
I.PROPAGATION_MANDATORY:使用当前事务,若没有事务就抛出异常。
I.PROPAGATION_REQUIRES_NEW:新建事务,若当前存在事务,把
事务挂起。
I.PROPAGATION_NOT_SUPPORTS:以非事务方式执行操作,如果当前
存在事务就挂起。
I.PROPAGATION_NEVER:以非事务的方式执行,如果当前存在事务抛出异常。
I.PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。
若没有事务,则执行PROPAGATION_REQUIRED类似的操作。
isolation属性:事务隔离级别 DEFAULT
rollback-for属性: 将被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException'
read-only属性:事务是否只读?false
-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="get*" propagation="REQUIRED" read-only="true"/>
<tx:method name="load*" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 第一个 * —— 通配 任意返回值类型
第二个 * —— 通配 包com.spring.services下的任意class
第三个 * —— 通配 包com.spring.services下的任意class的任意方法
第四个 .. —— 通配 方法可以有0个或多个参数
-->
<!--配置切入点-->
<aop:config>
<aop:pointcut id="allMethod" expression="execution(* com.spring.services.*.*(..))"/>
<aop:advisor pointcut-ref="allMethod" advice-ref="txAdvice"/>
</aop:config>
</beans>
<!--
注意:导入commons-dbcp.jar
commons-pool.jar
相关推荐
在压缩包中的Spring事务管理练习,你可以尝试创建一个简单的示例,例如模拟两个银行账户转账的过程,通过开启事务确保转账的原子性,即转账操作要么全部成功,要么全部失败。这样可以帮助你更好地理解Spring事务管理...
在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...
在本文中,我们将深入探讨Spring框架中的事务管理。Spring是一个广泛应用的Java企业级应用开发框架,它提供...如果你想要深入了解,可以参考提供的博客链接或其他相关资料,进一步学习Spring事务管理的细节和最佳实践。
Spring事务管理的核心是基于AOP(面向切面编程)来实现的。 **Spring事务的本质**实际上是依赖于底层数据库提供的事务支持。如果没有数据库层面的支持,Spring无法单独实现事务的功能。在传统的JDBC操作中,如果想...
这种方法只需要在 Spring 配置文件中定义一个事务管理对象(如 DataSourceTransactionManager),然后加入 `<tx:annotation-driven/>` 节点,引用该事务管理对象,然后即可在需要进行事务处理的类和方法使用 `@...
本篇文章将深入探讨Spring事务管理的五种方法,旨在帮助开发者更好地理解和运用这一核心特性。 首先,我们来了解什么是事务。在数据库操作中,事务是一组逻辑操作,这些操作要么全部成功,要么全部失败,确保数据的...
3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二.实验内容 (1)使用Spring JDBC实现书店的购书过程,即有如下一个BookShopDao接口...
Spring事务管理就是围绕这些特性来确保数据的一致性。 四、事务的传播行为 在Spring中,我们可以配置事务的传播行为,比如REQUIRED(默认,如果当前存在事务,则加入当前事务,否则新建一个事务)、PROPAGATION_...
Spring 框架是Java开发中...理解并熟练掌握Spring事务管理,对于提升应用程序的稳定性和可靠性至关重要。在实际开发中,结合声明式事务管理、事务传播行为、隔离级别和回滚规则,可以有效地确保数据的完整性和一致性。
本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...
在使用Spring框架进行应用程序开发时,事务管理是一项非常重要的特性。Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理因其简洁性和易用性而更受欢迎。本文将详细介绍Spring中...
总结来说,Spring JDBC事务管理是Spring框架中不可或缺的一部分,它提供了一套完整的解决方案,让开发者可以轻松地在应用程序中控制事务,保证数据的一致性。无论是编程式的还是声明式的事务管理,都有其适用场景和...
这个版本的Spring事务管理支持JDBC、Hibernate、JPA、iBatis等多种数据访问技术,可以无缝集成到各种持久层框架中。 在Spring中,事务管理器(如DataSourceTransactionManager或HibernateTransactionManager)是...
首先,Spring事务管理的核心概念是ACID(原子性、一致性、隔离性和持久性),这是所有事务系统的基础。在Spring中,事务管理分为两种模式:声明式事务管理和编程式事务管理。声明式事务管理通过配置元数据(如XML或...
Spring事务管理主要分为两种方式:编程式事务管理和声明式事务管理。编程式事务管理是通过编写代码来控制事务的开始、提交、回滚等操作,而声明式事务管理则是通过配置或注解来定义事务边界,更加直观和易于使用。 ...
总结起来,Spring和Hibernate的事务管理是企业级Java应用中的关键组件,它们提供了一种优雅的方式来处理复杂的数据库操作。理解并掌握其原理和配置,对于提升代码质量和系统稳定性具有重要意义。在阅读本文档...
Spring事务管理是企业级Java应用中不可或缺的一部分,它确保了数据的一致性和完整性,尤其是在多线程和分布式环境中。本实例将深入探讨Spring事务管理的实现与应用。 首先,Spring事务管理分为编程式事务管理和声明...
- **配置事务管理器**:接下来,需要配置一个事务管理器(如`DataSourceTransactionManager`),它负责管理事务的开始、提交和回滚。 - **配置事务规则**:最后,需要配置事务规则,指定哪些方法需要在事务中执行。 ...