Spring3开发实战 之 第五章:Spring中的事务

私塾在线老师出品,品质值得信赖

地址:http://sishuok.com/product/181

 

还有免费课程:http://sishuok.com/presentcourse

=============广告==============================

 

Spring框架引人注目的重要因素之一是它全面的事务支持。Spring框架提供了一致的事务管理抽象,这带来了以下好处:
1:为复杂的事务API提供了一致的编程模型,如JTA、JDBC、Hibernate、JPA和JDO
2:支持声明式事务管理
3:提供比复杂的事务API(诸如JTA)更简单的、更易于使用的编程式事务管理API
4:非常好地整合Spring的各种数据访问抽象
Spring事务抽象的关键是事务策略的概念。这个概念由org.springframework.transaction.PlatformTransactionManager接口定义:

java代码:
  1. public interface PlatformTransactionManager {  
  2.     TransactionStatus getTransaction(TransactionDefinition definition)  
  3.         throws TransactionException;  
  4.     void commit(TransactionStatus status) throws TransactionException;  
  5.     void rollback(TransactionStatus status) throws TransactionException;  
  6. }  
  7. ge  

tTransaction(..)方法根据一个类型为 TransactionDefinition 的参数返回一个 TransactionStatus 对象。返回的 TransactionStatus 对象可能代表一个新的或已经存在的事务(如果在当前调用堆栈有一个符合条件的事务。如同J2EE事务环境,一个 TransactionStatus 也是和执行 线程 绑定的)
TransactionDefinition接口指定
1:事务隔离:当前事务和其它事务的隔离的程度。例如,这个事务能否看到其他事务未提交的写数据?
2:事务传播:通常在一个事务中执行的所有代码都会在这个事务中运行。但是,如果一个事务上下文已经存在,有几个选项可以指定一个事务性方法的执行行为:例如,简单地在现有的事务中继续运行(大多数情况);或者挂起现有事务,创建一个新的事务。Spring提供EJB CMT中常见的事务传播选项。
3:事务超时: 事务在超时前能运行多久(自动被底层的事务基础设施回滚)。
4:只读状态: 只读事务不修改任何数据。只读事务在某些情况下(例如当使用Hibernate时),是一种非常有用的优化。
 
高层次方案:
首选的方法是使用Spring的高层持久化集成API。这种方式不会替换原始的API,而是在内部封装资源创建、复用、清理、事务同步以及异常映射等功能,这样用户的数据访问代码就不必关心这些,而集中精力于自己的持久化逻辑。
低层次方案 :
在较低层次上,有以下这些类:DataSourceUtils(针对JDBC),SessionFactoryUtils(针对Hibernate),PersistenceManagerFactoryUtils(针对JDO)等等。也就是说,在纯JDBC中,如果你需要使用Spring的事务,那么就需要使用上面的类来管理连接,如下:
Connection conn=DataSourceUtils.getConnection(dataSource);
当然,一旦你用过Spring的JDBC支持或Hibernate支持,你一般就不再会选择 DataSourceUtils 或是别的辅助类了,因为你会更乐意与Spring抽象一起工作,而不是直接使用相关的API。
 
 
Spring框架提供了一致的事务管理抽象,通常实施事务的步骤是:
1:定义资源(DataSource/SessionFactory……)
2:定义事务管理器(管理资源的事务)
3:定义事务通知:定义了如何实施事务(实施事务的方法名和对应的事务属性),需要使用事务管理器管理事务,定义了如何选择目标对象的方法及实施的事务属性
4:定义advisor(切入点和事务通知):切入点选择需要实施事务的目标对象(通常是业务逻辑层)
5:Spring织入事务通知到目标对象(AOP代理)
要使用Spring的事务,首先要先定义一个与数据源连接的DataSource,然后使用Spring的DataSourceTransactionManager,并传入指向DataSource的引用,比如,JDBC的事务配置如下:

java代码:
  1. <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  2. <property name="driverClassName">  
  3. <value>oracle.jdbc.driver.OracleDriver</value></property>  
  4. <property name="url">  
  5. <value>jdbc:oracle:thin:@localhost:1521:orcl</value></property>  
  6. <property name="username"> <value>test</value> </property>  
  7. <property name="password" value="test"/>  
  8. </bean>  
  9. <bean id="txManager"  
  10. class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/>  
  11. </bean>  
如果使用JTA,示例如下:

java代码:
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3. xmlns:context="http://www.springframework.org/schema/context"  
  4. xmlns:aop="http://www.springframework.org/schema/aop"  
  5. xmlns:tx="http://www.springframework.org/schema/tx"  
  6. xmlns:jee="http://www.springframework.org/schema/jee"  
  7. xsi:schemaLocation="  
  8. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  11. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  12. http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd  
  13. ">  
  14.    
  15.   <jee:jndi-lookup id="dataSource" jndi-name="jdbc/jpetstore"/>  
  16.   <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />  
  17. </beans>  
Hibernate的事务配置,示例如下:
1:Spring对Hibernate的集成
2:然后配置事务如下:

java代码:
  1. <bean id="txManager“  
  2. class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  3.   <property name="sessionFactory" ref="sessionFactory" />  
  4. </bean>  
可以简单地使用 JtaTransactionManager 来处理Hibernate事务和JTA事务,就像我们处理JDBC,或者任何其它的资源策略一样,如下:

java代码:
  1. <bean id="txManager"  
  2. class="org.springframework.transaction.jta.JtaTransactionManager"/>  
注意任何资源的JTA配置都是这样的,因为它们都是全局事务,可以支持任何事务性资源。在所有这些情况下,应用程序代码根本不需要做任何改动。仅仅通过改变配置就可以改变事务管理方式,即使这些更改是在局部事务和全局事务间切换。
Spring的声明式事务管理是通过AOP实现的,Xml风格的声明式事务配置如下:

java代码:
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3. xmlns:context="http://www.springframework.org/schema/context"  
  4. xmlns:aop="http://www.springframework.org/schema/aop"  
  5. xmlns:tx="http://www.springframework.org/schema/tx"  
  6. xsi:schemaLocation="  
  7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  9. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">  
  11. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  12. <property name="dataSource" ref="dataSource"/>  
  13. </bean>  
  14. <tx:advice id="txAdvice" transaction-manager="txManager">  
  15.     <tx:attributes>  
  16.       <tx:method name="get*" read-only="true"/>  
  17.       <tx:method name="*"/>  
  18.     </tx:attributes>  
  19. </tx:advice>  
  20. <aop:config>  
  21.     <aop:pointcut id="myPointCut" expression="execution(* cn.javass.spring3.jdbc.Impl.*(..))"/>  
  22.     <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointCut"/>  
  23. </aop:config>  
  24. <bean name="api" class="cn.javass.spring3.jdbc.Impl">  
  25. <property name="ds" ref="dataSource"></property>  
  26. </bean>  
  27. <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  28. <property name="driverClassName">  
  29. <value>oracle.jdbc.driver.OracleDriver</value>  
  30. </property>  
  31. <property name="url">  
  32. <value>jdbc:oracle:thin:@localhost:1521:orcl</value>  
  33. </property>  
  34. <property name="username"> <value>ztb</value> </property>  
  35. <property name="password" value="ztb"/>  
  36. </bean>  
  37. </beans>  
 
事务回滚:可以在配置中指定需要回滚的Exception,如下:

java代码:
  1. <tx:advice id="txAdvice" transaction-manager="txManager">  
  2.   <tx:attributes>  
  3.  <tx:method name="get*" read-only="false"  
  4. rollback-for="NoProductInStockException"/>  
  5.  <tx:method name="*"/>  
  6.   </tx:attributes>  
  7. </tx:advice>  
<tx:advice/> 有关的设置,默认的 <tx:advice/> 设置如下:
1:事务传播设置是 REQUIRED
2:隔离级别是 DEFAULT
3:事务是 读/写
4:事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
5:任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚
 
视频配套PPT,视频地址【  Spring3开发实战-独家视频课程 】
 
 原创内容 转自请注明【  http://sishuok.com/forum/blogPost/list/0/2546.html#7320
 
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值