spring 事务(1)

spring的事务是spring aop应用的典范。本文从如下几个方面入手来看看事务在spring中是如何实现的。html

一、事务基础知识java

二、spring事务的配置形式有哪些mysql

三、spring事务的关键类linux

四、问题面试

#事务基础知识 ##数据库层面的事务 说到事务,咱们脑海里就应该出现事务的四个特性spring

原子性、隔离性、一致性、持久性。 'sql

四种隔离 级别数据库

一、序列化:串行化微信

二、可重复读:可重复读(会出现幻读)mybatis

三、读已提交:读已提交数据(会出现不可重复读和幻读)

四、读未提交:读未提交数据(会出现脏读,不可重复读和幻读)

##spring层面的事务 spring层面的事务和mysql的事务有所不一样。

四个特性

原子性、隔离性、一致性、持久性。

五种隔离级别

  1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.

    另外四个与JDBC的隔离级别相对应

  2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务能够看到这个事务未提交的数据。

    这种隔离级别会产生脏读,不可重复读和幻像读。

  3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另一个事务读取。另一个事务不能读取该事务未提交的数据

  4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别能够防止脏读,不可重复读。可是可能出现幻像读。

    它除了保证一个事务不能读取另外一个事务未提交的数据外,还保证了避免下面的状况产生(不可重复读)。

  5. ISOLATION_SERIALIZABLE 这是花费最高代价可是最 可靠的事务隔离级别。事务被处理为顺序执行。 除了防止脏读,不可重复读外,还避免了幻像读。

七种传播特性

  1. PROPAGATION_REQUIRED: 若是存在一个事务,则支持当前事务。若是没有事务则开启。

  2. PROPAGATION_SUPPORTS: 若是存在一个事务,支持当前事务。若是没有事务,则非事务的执行。

  3. PROPAGATION_MANDATORY: 若是已经存在一个事务,支持当前事务。若是没有一个活动的事务,则抛出异常。

  4. PROPAGATION_REQUIRES_NEW: 老是开启一个新的事务。若是一个事务已经存在,则将这个存在的事务挂起。

  5. PROPAGATION_NOT_SUPPORTED: 老是非事务地执行,并挂起任何存在的事务。

  6. PROPAGATION_NEVER: 老是非事务地执行,若是存在一个活动事务,则抛出异常。

  7. PROPAGATION_NESTED:若是一个活动的事务存在,则运行在一个嵌套的事务中. 若是没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。

spring的事务都是方法级别的。

#spring事务的配置形式有哪些

曾经有一个面试官问spring的事务都有哪些形式的配置?因此平时工做当中不能就配置一种就知道一种。要多多研究其实现原理。

spring的事务Transaction配置有三种形式。

一、直接将bean代理到事务中。主要将咱们的接口和实现类注入到TransactionProxyFactoryBean实例中。

二、使用拦截器TransactionInterceptor拦截请求。

三、注解形式

具体配置见文章: http://www.blogjava.net/robbie/archive/2009/04/05/264003.html

#spring事务的关键类

###PlatformTransactionManager

事务管理器接口。全部的事务管理器都要实现该接口。咱们通常使用的是

DataSourceTransactionManager。

###TxNamespaceHandler

spring事务的标签解析类。该类初始化了tx标签中的解析类。

public void init() {
		registerBeanDefinitionParser("advice", new TxAdviceBeanDefinitionParser());
		registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
		registerBeanDefinitionParser("jta-transaction-manager", new JtaTransactionManagerBeanDefinitionParser());
	}

spring事务的配置都须要这些解析类解析,将信息放到对应类的变量中去。

###TransactionDefinition 事务定义。事务的传播特性、隔离特性、只读特性、 超时特性和名称都在该接口类定义了。 实现类DefaultTransactionDefinition将事务的四个 特性指定了默认值。

private int propagationBehavior = PROPAGATION_REQUIRED;
	private int isolationLevel = ISOLATION_DEFAULT;
	private int timeout = TIMEOUT_DEFAULT;
	private boolean readOnly = false;

###TransactionStatus 事务状态类。事务的状态都是经过这个类获取。实现类有两个。

一、DefaultTransactionStatus

二、SimpleTransactionStatus

###SavepointManager

断点管理器。建立节点、释放节点和回滚节点操做的集合。 #问题

##问题1

spring管理事务,和数据库的事务有何联系和区别。

说道联系:

spring的事务管理就是将咱们平时写的事务代码和事务逻辑封装了。这样spring事务实际上是在开发者和数据库之间作了一个封装。spring操做数据库的事务最终实现仍是数据库的事务操做。这是事务的逻辑按照咱们本身配置的来。

好比:咱们配置某个方法的传播特性和隔离级别分别为REQUIRED、 ISOLATION_READ_COMMITTED。那么在执行该方法时候会执行事务拦截器。拦截器会根据咱们配置的隔离级别,将connection的隔离级别配置成ISOLATION_READ_COMMITTED,而后在提交链接执行sql。

说道区别:

spring事务里面的传播特性是针对spring自身的方法而言的。spring的传播特性有七种。传播特性是说若是某个受事务管理的方法中又调用了其余方法,那个方法也要涉及到sql执行的操做,那么事务如何处理。

int PROPAGATION_REQUIRED = 0;

执行当前事务,若是当前没事务则建立一个新事物执行。 

int PROPAGATION_SUPPORTS = 1;

执行当前事务,若是当前无事务就按照当前的执行。

int PROPAGATION_MANDATORY = 2; 

 支持当前事务,若是当前无事务则抛异常。 

 int PROPAGATION_REQUIRES_NEW = 3; 

 建立新的事务,若是当前有事务则将当前事务挂起。 

 int PROPAGATION_NOT_SUPPORTED = 4; 

 不支持当前事务,非事务形式执行。 

 int PROPAGATION_NEVER = 5; 

 不支持当前事务,若是当前有事务则抛异常。

int PROPAGATION_NESTED = 6;

当前事物存在,则在当前事务的嵌套事务中执行。

##问题2 spring里面的事务的组织思想

spring的事务是针对方法级别的。这一点能够从TransactionInterceptor实现了MethodInterceptor接口中看出来。

spring的事务配置也是多种多样的。咱们

可使用它的事物模板TransactionTemplate。

可使用注解标签tx:annotation-driven。

可使用事务代理类 TransactionProxyFactoryBean。

可使用aop配置切面advice和拦截点(pointcut)。

无论哪一个最后都要先走事务拦截器去初始化一个链接。后续hibernate或者mybatis都须要找到这个链接去执行sql。在执行sql后,不管跑错误也好仍是正常执行也好都是须要根据咱们配置的事务特性进行后续操做。

参考文献 http://www.blogjava.net/robbie/archive/2009/04/05/264003.html

http://blog.csdn.net/yaerfeng/article/details/28390773

http://www.linuxidc.com/Linux/2011-12/50178.htm

http://www.cnblogs.com/dyllove98/archive/2013/06/25/3155413.html

欢迎加入qq群: 122567875 欢迎关注微信公众号:hyssop的后花园

相关文章
相关标签/搜索