spring事务管理

Spring学习

*爱你&永不变心* 提交于 2020-01-05 05:34:32
1.Spring的三种实例化Bean的方式   1.1使用类构造器实例化      a.id:给bean取的一个名字,bean标签还有个name属性和id一样给bean取名字,但是id是具有唯一性,切id属性是xml文件标签的固有的属性,xml解析器会校验该属性(其中包括唯一性,以及值的校验,值不能出现一些字符),项目中可能取名字会用到特殊字符  时可以使用name属性。   b.class:类所在的包的完整路劲。   1.2. 使用静态工厂方法实例化         1.3.使用实例工厂方法实例化         1.4.启动spring容器和获取bean的方法    2.配置Spring管理的bean的作用域   交给spring管理的bean默认是使用单例模式,如果需要使用原型那么可以使用bean标签的 scope 属性:      scope="prototype"时每次获取bean的时候都会返回一个新的对象,并且在我们调用getBean方法时才初始化bean 3.Spring管理的Bean的生命周期   3.1.spring在启动容器的时候就帮我们初始化了bean,如果希望启动时不初始化,可以使用 lazy-init 属性:      3.2.有时候我们希望bean在初始化的时候执行某个方法(比如初始化一些资源),以前我们可以在构造方法中添加一个可以执行的方法:   

4种事务特性,5种隔离级别,7种传播行为

ⅰ亾dé卋堺 提交于 2020-01-04 01:41:39
什么是事务? 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务特性(4种): 原子性 (atomicity):强调事务的不可分割. 一致性 (consistency):事务的执行的前后数据的完整性保持一致. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰 持久性(durability) :事务一旦结束,数据就持久到数据库 如果不考虑隔离性引发安全性问题: 脏读 :一个事务读到了另一个事务的未提交的数据 不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致. (针对某条记录,两次查询不一致) 虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.(针对某张表,两次查询到条数不一致,查到了多的数据) 事务隔离级别(5种) DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生 已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生 可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生. 串行化的 (serializable)

事务的传播机制

谁说我不能喝 提交于 2020-01-04 01:40:34
1.什么是事务:   事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败)。   数据库向用户提供保存当前程序状态的方法,叫 事务提交 (commit ) ;当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫 事务回滚( rollback ) 2.事务的传播机制   以spring的事务传播机制为例子:   Spring事务机制主要包括 声明式事务 和 编程式事务 ,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考。   Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性。    spring在TransactionDefinition接口中定义了七个事务传播行为: propagation_requierd :如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择

Spring事务管理

时间秒杀一切 提交于 2020-01-04 01:39:00
1.Spring事务介绍: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务的4个特性(ACID): 1)原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 2)一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。 3)隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。 4)持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。 2.事务管理器 :JDBC、Hibernate、JPA、JTA四种事务管理器。 spring事务管理原理是动态代理。 3.基本事务属性 3.1 事务的5种隔离级别 并发事务引起的问题: 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务。并发虽然是必须的,但可能会导致以下的问题 : 脏读 :一个事务读到了另一个事务的 未提交 的update数据 . 不可重复读 :一个事务读到了另一个事务 已经提交 的 update

Spring 事务机制详解

社会主义新天地 提交于 2020-01-04 01:32:31
Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考。 Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性。 下面分别详细讲解,事务的四种属性,仅供诸位学习参考: Spring在TransactionDefinition接口中定义这些属性,以供PlatfromTransactionManager使用, PlatfromTransactionManager是spring事务管理的核心接口。 public interface TransactionDefinition { int getPropagationBehavior();//返回事务的传播行为。 int getIsolationLevel();//返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据。 int getTimeout();//返回事务必须在多少秒内完成

Spring 事务机制详解

旧巷老猫 提交于 2020-01-04 01:32:06
原文出处: 陶邦仁 Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考。 Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性。 下面分别详细讲解,事务的四种属性,仅供诸位学习参考: Spring在TransactionDefinition接口中定义这些属性,以供PlatfromTransactionManager使用, PlatfromTransactionManager是spring事务管理的核心接口。 1 2 3 4 5 6 public interface TransactionDefinition { int getPropagationBehavior(); //返回事务的传播行为。 int getIsolationLevel(); //返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据。 int

事务的传播行为和隔离级别

吃可爱长大的小学妹 提交于 2020-01-04 01:31:10
事务使用步骤如下: 步骤一、在spring配置文件中引入<tx:>命名空间 <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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <!-- 事务管理器配置, Hibernate单数据源事务 --> <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3

Spring事务:传播行为与隔离级别

℡╲_俬逩灬. 提交于 2020-01-04 01:30:35
文章主要来源:https://github.com/dengdaiyemanren/onetopiconeday/wiki/spring%E4%BA%8B%E5%8A%A1%E9%85%8D%E7%BD%AE 传播行为 在TransactionDefinition接口中定义了七个事务传播行为: PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起,需要使用JtaTransactionManager作为事务管理器。 PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 也需要使用JtaTransactionManager作为事务管理器 PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。 隔离级别

Spring事务

爷,独闯天下 提交于 2020-01-03 00:03:00
spring事务基本配置 参见: http://www.cnblogs.com/leiOOlei/p/3725911.html spring事务传播机制 参见: http://www.cnblogs.com/aurawing/articles/1887030.html 简单说一下new和nested的区别。 使用new的时候,外层事务的提交或回滚,与new的事务没有关系。而使用nested时,内层事务最终是提交还是回滚,需要依赖于外层事务。参见下表。 事务传播配置 外层事务(set a=1) 内层事务(set b=2) 最终结果 new 提交 提交 a=1 && b=2 new 提交 回滚 a=1 new 回滚 提交 b=2 new 回滚 回滚 什么都不变 nested 提交 提交 a=1 && b=2 nested 提交 回滚 a=1(这种情况需要增加一个配置: <property name="globalRollbackOnParticipationFailure" value="false" /> ) nested 回滚 提交 什么都不变 nested 回滚 回滚 什么都不变 spring事务隔离机制 参见: Isolation Level(事务隔离等级): Serializable:最严格的级别,事务串行执行,资源消耗最大; REPEATABLE READ

Spring笔记4

陌路散爱 提交于 2020-01-01 12:50:04
Spring中的JdbcTemplate JdbcTemplate:他是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装。 JdbcTemplate的作用:用于和数据库交互的,实现对表的CRUD操作 JdbcTemplate的入门 导入相关的坐标 <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.0.3.RELEASE</version> </dependency> <dependency>