spring事务管理
6.1、spring的事务管理器
Spring框架并没有直接管理用户的应用系统中的事务,它只是提供许多供用户选择的事务管理器,然后将事务管理的责任委托给与此事务管理器对应的持久化技术的事务实现。
事务管理实现
使用时机
org.springframework.jdbc.datasource.
DataSourceTransactionManager
在单一的JDBC DataSource中管理事务
org.springframework.orm.hibernate3.HibernateTransactionManager
当持久化机制是Hibernate时,用它来管理职务
org.springframework.orm.jpa.JpaTransactionManager
当JPA用作持久化时,用它来管理职务
org.springframework.transaction.jta.JtaTransactionManager
使用一个JTA实现来管理事务。在一个事务跨越多个资源时必须使用
配置文件中的配置如下:
<bean id=”transactionManager” class=” org.springframework.jdbc.datasource. DataSourceTransactionManager”>
<property name=”dataSource” ref=” dataSource”/>
</bean>
6.2、事务属性介绍
1>.传播行为
传播行为
说明
PROPAGATION_REQUIRED
必须在一个事务中执行。如果当前有一个事务正在进行,该方法将会在那个事务中执行。否则要开始一个新事务。Spring事务传播行为的默认值。
PROPAGATION_SUPPORTS
支持现有的事务。如果当前没有事务在进行,就以非事务的方式执行
PROPAGATION_MANDATORY
方法必须在一个现有事务中进行,否则会抛出异常。
PROPAGATION_REQUIRES_NEW
必须在它自己的新启事务里进行。如果现有事务在进行就先暂停它
PROPAGATION_NOT_SUPPORTED
不应在事务中进行。如果现有事务在进行就先暂停它
PROPAGATION_NEVER
不应在事务中进行。如果现有事务在进行就抛出异常
PROPAGATION_NESTED
如果现有事务正在进行,则该方法运行在一个嵌套式事务中。否则PROPAGATION_REQUIRED执行
2>.隔离级别
隔离级别
说明
ISOLATION_DEFAULT
使用底层数据库默认的隔离级别spring事务隔离级别的默认值
ISOLATION_READ_UNCOMMITED
充许另一个事务可以读到这个事务未提交的数据可能导致脏读、不可重复读和幻读。
ISOLATION_READ_COMMITED
保证一个事务修改的数据提交后才能被另一个事务读取可能导致不可重复读和幻读。
ISOLATION_REPEATABLE_READ
要求对相同字段的多次读取的结果必须相同,除非事务本身更新了数据可能导致幻读。
ISOLATION_SERIALIZABLE
事务被处理为顺序执行可以防止脏读、不可重复读、幻读。
3>.只读提示
如果事务只对后端数据进行读操作,则后端数据库可以采用一些优化措施来提高执行效率。但必须在事务中才有效。也就是说要搭配传播行为PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED 来设置。
4>.事务超时间隔
还可以设置事务的超时间隔,让事务在特定秒数后自动回滚,不必等它自己结束。由于计时是从事事务开始时算起的,所以它也得搭配传播行为为 PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED 来设置。
5>.回滚规则
当事务运行过程中抛出异常时,事务可以被声明为回滚或者不回滚。默认情况下只在出现RuntimeExceptio才会回滚,而在出现受检异常时不回滚。
当然,也可以改变这种回滚规则,可以声明一个事务在出现特定的受检异常时能回滚。也可以声明一个事务在出现特定的非受检异常时不回滚。
6.3、声明式事务管理
1>.基于xml配置方式
第1步:定义事务通知
第2部:把事务通知绑定到切入点
Xml代码
<?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="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///spring" />
<property name="username" value="root" />
<property name="password" value="123" />
</bean>
<!-- JDBC事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- DataSource事务管理器需要数据源实例 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 第1步:定义事务通知(主要是针对指定事务管理器对应的事务实现配置事务参数) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 对选定的方法配置详细的事务属性 -->
<tx:method name="find*" read-only="true" />
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 配置哪些类的方法需要进行事务管理 最好不要设置到dao层 ,可以设置到 业务层--> 包名称 能模糊
<!-- 返回值 包名字 类名字 方法名字(参数情况) * com.company.*.*(..) 表示所有的返回值 com.company包 下的所有的类 所有的方法 方法的参数不限-->
<!-- 第2步:AOP配置 -->
<aop:config>
<!-- 声明事务切入点(配置哪些类的哪些方法参与事务) -->
<aop:pointcut id="AllServiceMethod"
expression="execution(* com.zxf.service.*.*(..))" />
<!-- 通知器(把事务通知绑定到切入点) -->
<aop:advisor pointcut-ref="AllServiceMethod" advice-ref="txAdvice" />
</aop:config>
<!-- 以下是Spring容器管理的Bean -->
<bean id="accountDao" class="com.zxf.dao.AccountDaoJDBCImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="accountService" class="com.zxf.service.AccountService">
<property name="accountDao" ref="accountDao"/>
</bean>
<!-- Hibernate事务管理器
<bean id="txManager2"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref ="sessionFactory"/>
</bean>
-->
<!-- JPA事务管理器
<bean id="txManager3"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref ="entityManagerFactory"/>
</bean>
-->
</beans>
事务管理器一共有5种:
DataSourceTransactionManager JDBC事务管理器
HibernateTransactionManager Hibernate事务管理器
JdoTransactionManager JDO事务管理器
JtaTransactionManager JTA事务管理器
PersistenceBrokerTransactionManager Apache的OJB事务管理器
2>.基于注解方式
第1步:在spring配置文件中启用对AspectJ注解的支持
Xml代码
<?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="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///spring_04" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- JDBC事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- DataSource事务管理器需要数据源实例 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 启用对事务注解的支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 以下是Spring容器管理的Bean -->
<bean id="accountDao" class="com.zxf.dao.AccountDaoJDBCImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="accountServiceByTxAnnotation"
class="com.zxf.service.AccountServiceByTxAnnotation">
<property name="accountDao" ref="accountDao"/>
</bean>
</beans>
第2步:用@Transactional注解指定接口、类或方法的事务属性
package com.zxf.service;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import com.zxf.dao.AccountDao;
import com.zxf.domain.Account;
/** Account业务逻辑类--基于注解方式的声明式事务管理配置 */
@Transactional //指定需要声明式事务,事务属性使用默认值
public class AccountServiceByTxAnnotation {
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao){
this.accountDao = accountDao;
}
}
Java代码
package com.zxf.service;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import com.zxf.dao.AccountDao;
import com.zxf.domain.Account;
/** Account业务逻辑类--基于注解方式的声明式事务管理配置 */
@Transactional //指定需要声明式事务,事务属性使用默认值
public class AccountServiceByTxAnnotation {
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao){
this.accountDao = accountDao;
}
}
<!-- 配置哪些类的方法需要进行事务管理 最好不要设置到dao层 ,可以设置到 业务层--> 包名称 能模糊
<!-- 返回值 包名字 类名字 方法名字(参数情况) * com.company.*.*(..) 表示所有的返回值 com.company包 下的所有的类 所有的方法 方法的参数不限-->
资料来自网站:http://z-xiaofei168.iteye.com/blog/1044843
相关推荐
光伏风电混合并网系统Simulink仿真模型:光伏发电与风力发电的协同控制与并网逆变器设计,光伏风电混合并网系统simulink仿真模型。 系统有光伏发电系统、风力发电系统、负载、逆变器lcl大电网构成。 光伏系统采用扰动观察法实现mppt控制,经过boost电路并入母线; 风机采用最佳叶尖速比实现mppt控制,通过三相电压型pwm变器整流并入母线; 并网逆变器VSR采用基于电网电压定向矢量控制双闭环,经过lcl滤波器并入大电网。 ,核心关键词: 1. 光伏风电混合并网系统 2. Simulink仿真模型 3. 光伏发电系统 4. 风力发电系统 5. 负载 6. 逆变器LCL大电网 7. MPPT控制 8. 扰动观察法 9. Boost电路 10. 最佳叶尖速比 11. 三相电压型PWM变换器 12. VSR电网电压定向矢量控制双闭环 13. LCL滤波器 以上关键词用分号分隔为: 光伏风电混合并网系统;Simulink仿真模型;光伏发电系统;风力发电系统;负载;逆变器LCL大电网;MPPT控制;扰动观察法;Boost电路;最佳叶尖速比
DXP元器件库,初学者有用
2025专业技术人员继续教育公需课题库(附含答案).pptx
C++编写的资产管理系统(带SQLServer数据库文件。)。
Simulink下的MATLAB平台在智能电网微网运行控制中的并网仿真与逆变器控制策略探讨,Simulink:智能电网微网运行控制仿真及其参考资料 关键词:微电网 运行控制 仿真平台:MATLAB 主要内容:并网仿真 逆变器控制 下垂控制 ,关键词:微电网; 运行控制; Simulink仿真; MATLAB; 并网仿真; 逆变器控制; 下垂控制; 智能电网微网。,"Simulink在MATLAB平台下的微电网运行控制仿真研究及资料整合"
Matlab中的HMM隐马尔科夫与Markov马尔科夫时间序列预测源代码及数据集(可运行,适用于单变量预测),HMM隐马尔科夫时间序列预测 Markov马尔科夫时间序列预测(Matlab) 1.所有程序经过验证,保证可以运行 2.程序包括源码(主程序一个,子函数两个)和数据集; 3.程序适用于单变量时间序列预测。 注意:HMMP为主程序、data为数据集,其余m文件为函数文件,运行主文件HMMP即可。 ,HMM隐马尔科夫模型; 时间序列预测; Matlab程序; 验证可用; 主程序; 函数文件; 单变量预测; 包含源码与数据集。,"HMM与马尔科夫模型结合的时间序列预测程序(Matlab)验证版"
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
python学习练习游戏案例,详细备注解释代码,最适合初学者,练手学习,资源已上传欢迎下载学习
三菱FX系列自由口通讯程序详解:FX3U-232BD与上位机通讯及PLC与触摸屏应用,三菱FX自由口通讯程序 三菱FX系列自由口通讯程序 利用FX3U-232BD与上位机自由口通讯, 有PLC程序和触摸屏程序,通过连接三根线即可通讯 具有很好的学习意义和借鉴价值。 ,核心关键词:三菱FX系列; 自由口通讯程序; FX3U-232BD; 上位机; PLC程序; 触摸屏程序; 三线连接; 学习意义; 借鉴价值。,三菱FX系列自由口通讯程序:简易编程与实用连接指南
1990-2022年各省份基尼系数
Python自动化办公源码-60 pandas-matplotlib
MATLAB下的模型预测控制在楼宇负荷需求响应中的研究与应用:结合热力学与舒适度考量,MATLAB代码:基于模型预测控制的楼宇负荷需求响应研究 关键词:楼宇负荷 空调 模型预测控制 需求响应 参考文档:《Model Predictive Control of Thermal Storage for Demand Response》完全复现 仿真平台:MATLAB+CVX平台 主要内容:代码主要做的是一个建筑楼宇的需求响应问题,首先利用楼宇的储热特性,结合热力学方程构建了其储热模型,其次,考虑在动态能量电价的引导下,对楼宇负荷进行需求侧管理,从而能够对其负荷曲线进行改善,在需求响应的过程中也考虑了用户的舒适度,相对来讲比较全面,模型的求解采用的是较为创新的模型预测控制算法,更加创新,而且求解的效果更好,店主已经对代码进行了深入的加工和处理,出图效果非常好,代码质量非常高 ,关键词:楼宇负荷; 空调; 模型预测控制; 需求响应; 储热模型; 动态能量电价; 舒适度; MATLAB代码; CVX平台; 深入处理。,基于MATLAB的模型预测控制研究:楼宇负荷需求响应管理与优化
Prius 2004永磁同步电机设计报告:从理论到实践——磁路法、Maxwell仿真建模与温升分析,Prius2004永磁同步电机设计报告: 磁路法、maxwell有限元法、MotorCAD温仿真、应力分析。 (内容比较完善,用于很需要的朋友,不支持讲解,等额外服务哈。 ) 内容:: 1.Excell设计程序,可以了解这个电机是怎么设计出来的,已知功率转矩等,计算电机的体积,叠厚,匝数等。 2.Maxwell参数化仿真模型:可以学习参数化仿真模型,有限元结果可查看。 3. 橡树岭拆解和实测数据:官方的实测数据和差拆解报告。 4.maxwell prius2004建模仿真教程等:ppt资料一步一步教学怎么去建模 5.温升仿真分析,提供motor cad模型 ,磁路法; Maxwell有限元法; MotorCAD温仿真; 应力分析; Excell设计程序; Maxwell参数化仿真模型; 橡树岭拆解实测数据; Maxwelli Prius 2004建模仿真教程; 温升仿真分析; Motor CAD模型。,2004款Prius永磁同步电机设计报告:Excell程序与Maxwell有限元法融
基于Voronoi理论的维修站点选址算法研究.pdf
料箱输送线程序:PLC设备布局图及电气图纸集成系统(包含MultiControl控制卡等,采用STL开发,仅供学习参考),料箱输送线程序,带目的地跟踪,提供设备布局图和电气图纸以及博途程序。 程序语言较多使用了STL,程序仅供学习参考。 硬件配置:PLC:1515-2 PN HMI:TP700 Confort 主要设备有:英特诺直流辊筒电机,控制卡MultiControl;条码阅读器Sick CLV620; 和MiniLoad堆垛机通过Anybus模块通讯;称重模块品牌碧彩BIZERBA;还有使用丹佛斯变频器的提升机。 ,料箱输送线程序; 目的地跟踪; 设备布局图; 电气图纸; 博途程序; STL语言; PLC硬件配置; 英特诺直流辊筒电机; 控制卡MultiControl; 条码阅读器Sick CLV620; Anybus模块通讯; 称重模块碧彩BIZERBA; 丹佛斯变频器提升机。,"多设备集成:带目的地跟踪的料箱输送线博途程序"
1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/144634074 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
2025网络安全法竞赛题题库及参考答案.pptx
CAN总线在小电流接地故障检测中的应用.pdf
三菱步进电机驱动器控制定位案例:触摸屏PLC程序实现正反转、原点回归及急停报警功能详解,三菱步进电机驱动器控制的定位案例,带有触摸屏程序,plc程序 程序功能实现正反转控制,原点回归,急停报警等 触摸屏有报警显示,故障历史这些常用的画面设置,对控制多轴运动很有帮助,值得去学习一下 ,核心关键词:三菱步进电机驱动器;定位控制;触摸屏程序;PLC程序;正反转控制;原点回归;急停报警;报警显示;故障历史;多轴运动控制。,"三菱步进电机驱动:触摸屏PLC程序化控制多轴定位系统"
2025最新工业机器人考试题库及答案.doc