Springの事务:庐山真面目(一)

本文深入探讨了如何利用Spring框架管理事务,包括基于注解的事务管理和通过配置文件实现的事务管理。重点讲解了Spring中事务的四大特性:原子性、一致性、隔离性和持久性,并通过实例展示了如何在实际应用中应用这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了完成对数据的操作,企业应用经常要求并发访问在多个构件之间共享的数据。这些应用在下列条件下应该维护数据的完整性(由应用的商务规则来定义):
原子性(ATOMICITY):
一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。
一致性(CONSISTENCY):
一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束)。在完成了一个成功的事务时,数据应处于一致的状态。换句话说,一个事务应该把系统从一个一致-状态转换到另一个一致状态。举个例子,在关系数据库的情况下,
一个一致的事务将保护定义在数据上的所有完整性约束。
隔离性(ISOLATION):
在同一个环境中可能有多个事务并发执行,而每个事务都应表现为独立执行。串行的执行一系列事务的效果应该同于并发的执行它们。这要求两件事:
在一个事务执行过程中,数据的中间的(可能不一致)状态不应该被暴露给所有的其他事务。
两个并发的事务应该不能操作同一项数据。数据库管理系统通常使用锁来实现这个特征。
持久性(DURABILITY):
一个被完成的事务的效果应该是持久的。
为什吗要用Spring管理事务?相信你看了之后肯定有所理解,下面我们来讲讲Spring中事物的具体应用:
1:首先说一下基于注解的事务管理:看下面的工程:

:2:

3:

4:

<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
		">
	  <bean id="userDao" class="com.jzh.daoimp.UserDaoImp">
	  	<property name="dataSource" ref="dataSource"></property>
	  </bean>
	 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	        <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>
	
	   <bean id="propertyConfigurer" 
	          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	        <property name="locations">
	            <list>
	                <value>classpath:jdbc.properties</value>
	            </list>
	        </property>
    </bean>
   *********************************基于配置文件tx标签的事务管理*************************************8 
    <tx:annotation-driven transaction-manager="txManager"/>
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	  <property name="dataSource" ref="dataSource"/>
  </bean>
  
	<aop:config>
	<!-- 执行哪些方法时执行事务 -->
		<aop:pointcut id="transactionPointcut" expression="execution(public * com.jzh.daoimp.*.*(..) )"/>
	<!-- 执行事务采用的建议 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut" order="2"/> 
	
	 <!--执行事务时执行拦截器
	 <aop:aspect id="profilingAspect" ref="profiler">
	      <aop:pointcut id="serviceMethodWithReturnValue"
	              expression="execution(!void x.y..*Service.*(..))"/>
	      <aop:around method="profile" pointcut-ref="serviceMethodWithReturnValue"/>
	    </aop:aspect>
	  --> 

  </aop:config>
	<!-- 事物的建议具体内容 -->
  <tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
      <tx:method name="delete" no-rollback-for="RuntimeException"/>
      <tx:method name="*"/>
    </tx:attributes>
  </tx:advice>

</beans>
test:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值