//事务隔离和事务传播相关记载
事务隔离:
● 幻像读取(phantom read) 事务T1读取一条指定的WHERE子句所返回的结果集。然后事务T2新插入一行记录,这行记录恰好可以满足T1所使用查询中的WHERE子句的条件。然后T1又使用相同的查询再次对表进行检索,但是此时却看到了事务T2刚才插入的新行。这个新行就称为"幻像",因为对于T1来说这一行就像是变魔术似地突然出现了一样。
● 不可重复读取(nonrepeatabl read) 事务T1读取一行记录,紧接着事务T2修改了T1刚才读取的那一行记录的内容。然后T1又再次读取这一行记录,发现它与刚才读取的结果不同了。这中现象称为"不可重复"读,因为T1原来读取的那一行记录已经发生了变化。
● 脏读(dirty read) 事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取更新后的行。然后T1执行回滚操作,取消了刚才所做的修改。现在T2所读取的行就无效了(也称为"脏"数据),因为在T2读取这行记录时,T1所做的修改并没有提交。
SQL数据库实现了不同级别的事务隔离性:
引用
● READ UNCOMMITTED 幻像读、不可重复读和脏读都允许。
● READ COMMITTED 允许幻像读和不可重复读,但是不允许脏读。
● REPEATABLE READ 允许幻像读,但是不允许不可重复读和脏读。
● SERIALIZABLE 幻影读、不可重复读和脏读都不允许。
Oracle数据库支持READ COMMITTED和SERIALIZABLE两种事务隔离性级别,Oracle数据库默认使用的事务隔离性级别却是READ COMMITTED。而SQL标准定义的默认事务隔离性级别是SERIALIZABLE。
Spring中对事务传播的定义:
引用
●PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
●PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
●PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。
●PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
●PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
●PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
●PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
//Spring事务配置
提供统一的API处理不同的事务管理策略。
//Spring事务控制接口和方法
org.springframework.transaction.PlatformTransactionManager接口提供了Spring的事务策略
//接口如下定义
public interface PlatformTransactionManager {
TransactionStatus getTransaction(TransactionDefinition definition)
throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
TransactionDefinition接口定义了相关了事务属性包括:
- Isolation:事务级别
- Propagation:传播方式
- Timeout:事务延迟时间
- Read-only status:是否只读状态
TransactionStatus接口提供了简便的方法来控制事务执行和查询事务状态,
//接口如下定义
public interface TransactionStatus {
boolean isNewTransaction();
void setRollbackOnly();
boolean isRollbackOnly();
}
//简单的Spring事务管理器配置(XML-Based),根据不同事务管理机制
<!--jdbc-->
<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="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--JTA-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/jpetstore"/>
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />
<!-- other <bean/> definitions here -->
</beans>
<!--Hibernate-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>org/springframework/samples/petclinic/hibernate/petclinic.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
</value>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
//Spring提供的持久层操作模板类
JdbcTemplate, HibernateTemplate, 和 JdoTemplate 类等。
//Spring声明方式应用程序关联事务配置
//基本配置举例
<!-- base on aop -->
<?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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- this is the service object that we want to make transactional -->
<bean id="fooService" class="x.y.service.DefaultFooService"/>
Transaction management
Spring Framework (2.5.6) 228
<!-- the transactional advice (what 'happens'; see the <aop:advisor/> bean below) -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<tx:method name="get*" read-only="true"/>
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- ensure that the above transactional advice runs for any execution
of an operation defined by the FooService interface -->
<aop:config>
<aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
</aop:config>
<!-- don't forget the DataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
<!-- similarly, don't forget the PlatformTransactionManager -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- other <bean/> definitions here -->
</beans>
//Spring事务回滚的条件
要求捕获的异常是uncheck Exception.
可以关联框架的任何层次任何方法上。比如service层的某个方法上
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
功能说明: 高校四六级报名管理系统的主要使用者分为管理员和学生,实现功能包括管理员:个人中心、学生管理、四六级报名管理、报名记录管理、准考记录管理、身份证认证管理、系统管理,学生:个人中心、报名记录管理、准考记录管理、身份证认证管理,前台首页;首页、四六级报名、新闻资讯、我的、跳转到后台、在线客服等功能。 环境说明: 开发语言:java 框架:ssm jdk版本:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse 部署容器:tomcat7+
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
功能说明: 水果销售管理网站 的主要使用者分为管理员:主页、个人中心、用户管理、水果信息管理、水果类别管理、销售单位管理、水果销售分析管理、会员分析管理、系统管理、订单管理,用户前台;首页、水果信息、新闻资讯、我的、跳转到后台、购物车等功能。 环境说明: 开发语言:java 框架:ssm jdk版本:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse 部署容器:tomcat7+
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
动态加载案例分析与实践.docx
人工智能 參考資料 1. NVIDIA DIGITS DevBox 2. ASUS X99E-WS User Guide 3. CUDA Toolkit Documentation v7.5 4. Ubuntu Documentation - OpenLDAP Server 5. Linux man pages - exports(5) 6. SSD Caching Using dm-cache Tutorial 7. Kernel documentation - dm-cache
c语言基础代码练习题
数据集-目标检测系列- 土拨鼠 检测数据集 marmot >> DataBall 标注文件格式:xml 项目地址:https://github.com/XIAN-HHappy/ultralytics-yolo-webui 通过webui 方式对ultralytics 的 detect 检测任务 进行: 1)数据预处理, 2)模型训练, 3)模型推理。 脚本运行方式: * 运行脚本: python webui_det.py or run_det.bat 根据readme.md步骤进行操作。 目前数据集暂时在该网址进行更新: https://blog.csdn.net/weixin_42140236/article/details/142447120?spm=1001.2014.3001.5501
mmexport1728985261641.mp4
一、项目简介 本项目是一套基于Servlet+jsp实现学生选课系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,确保可以运行! 二、技术实现 后端:javaWeb,servlet,MySQL 前端:css,bootstrap,jquery,jsp 开发工具环境:IDEA/Eclipse,Navicat,jdk1.8 二、功能介绍 系统中涉及系统管理员,教师,学生三种权限; 主要功能有: 系统管理员:学生信息管理,教师信息管理,课程信息管理; 教师:查看课程、查看学生、成绩录入、个人信息查看; 学生:课程信息查看、选择课程、成绩查询、个人信息查看;
本代码是基于python pytorch环境安装的。 下载本代码后,有个环境安装的requirement.txt文本 首先是代码的整体介绍 总共是3个py文件,十分的简便 本代码是不含数据集图片的,下载本代码后需要自行搜集图片放到对应的文件夹下即可 需要我们往每个文件夹下搜集来图片放到对应文件夹下,每个对应的文件夹里面也有一张提示图,提示图片放的位置 然后我们需要将搜集来的图片,直接放到对应的文件夹下,就可以对代码进行训练了。 运行01生成txt.py,是将数据集文件夹下的图片路径和对应的标签生成txt格式,划分了训练集和验证集 运行02CNN训练数据集.py,会自动读取txt文本内的内容进行训练,这里是适配了数据集的分类文件夹个数,即使增加了分类文件夹,也不需要修改代码即可训练 训练过程中会有训练进度条,可以查看大概训练的时长,每个epoch训练完后会显示准确率和损失值 训练结束后,会保存log日志,记录每个epoch的准确率和损失值 最后训练的模型会保存在本地名称为model.ckpt 运行03pyqt界面.py,就可以实现自己训练好的模型去识别图片了
功能说明: 文物管理系统的主要使用者分为管理员:个人中心、用户管理、文物分类管理、文物信息管理、文物外借管理、文物维修管理、留言板管理、论坛交流、系统管理。用户前台:首页、文物信息、论坛交流、文物资讯、留言反馈、我的、跳转到后台等功能。 环境说明: 开发语言:java 框架:ssm jdk版本:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse 部署容器:tomcat7+
数据集和代码
DNS服务器搭建-单机部署
为Towny Flagwar实现中立国家 /nasetnu 设置自己的国家为中立(仅king可用)
数据可视化驾驶舱,包含地图,页面可以直接运行
非常好的电子设计小软件串口调试助手非常好用的软件.zip
GNSS整周模糊度确认理论方法研究进展_刘经南.caj
强网杯