当前位置: 首页 > news >正文

海宁网站建设免费广告发布平台app

海宁网站建设,免费广告发布平台app,wordpress手机导航三横拦,保定网站建设一、Spring 的事务管理 事务原本是数据库中的概念,在 Dao 层。但一般情况下,需要将事务提升到业务层,即 Service 层。这样做是为了能够使用事务的特性来管理具体的业务。 在 Spring 中通常可以通过以下两种方式来实现对事务的管理&#xff…

一、Spring 的事务管理

事务原本是数据库中的概念,在 Dao 层。但一般情况下,需要将事务提升到业务层,即 Service 层。这样做是为了能够使用事务的特性来管理具体的业务。

在 Spring 中通常可以通过以下两种方式来实现对事务的管理:

(1)使用 Spring 的事务注解管理事务

(2)使用 AspectJ 的 AOP配置管理事务

二、Spring 事务管理 API

Spring 的事务管理,主要用到两个事务相关的接口。

1、事务管理器接口(重点)

事务管理器是 PlatformTransactionManager 接口对象。

其主要用于完成事务的提交、回滚,及获取事务的状态信息。

 

A、 常用的两个实现类

PlatformTransactionManager 接口有两个常用的实现类

  • DataSourceTransactionManager:使用 JDBC 或 MyBatis 进行数据库操作时使用。

  • HibernateTransactionManager:使用 Hibernate 进行持久化数据时使用。

B、Spring 的回滚方式(理解)

Spring 事务的默认回滚方式是:发生运行时异常和 error 时回滚,发生受查(编译)异常时提交。不过,对于受查异常,程序员也可以手工设置其回滚方式。

C、回顾错误与异常(理解)

Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类 (或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java 的 throw 语句抛出。

Error:是程序在运行过程中出现的无法处理的错误,比如 OutOfMemoryError、ThreadDeath、NoSuchMethodError 等。当这些错误发生时,程序是无法处理(捕获或抛出)的,JVM 一般会终止线程。

Exception:程序在编译和运行时出现的另一类错误称之为异常,它是 JVM 通知程序员的一种方式。通过这种方式,让程序员知道已经或可能出现错误,要求程序员对其进行处理。

异常分为运行时异常与受查异常。

运行时异常:是 RuntimeException 类或其子类,即只有在运行时才出现的异常。如,NullPointerException、ArrayIndexOutOfBoundsException、 IllegalArgumentException 等均属于运行时异常。这些异常由JVM抛出,在编译时不要求必须处理(捕获或抛出)。但只要代码编写足够仔细,程序足够健壮,运行时异常是可以避免的。

【因此,运行时异常,也叫非受查异常,编译器无法检查到,需要程序员通过修改代码来解决】

受查异常【编译时异常】:即在代码编写时要求必须捕获或抛出的异常,若不处理,则无法通过编译。如 SQLException, ClassNotFoundException,IOException 等都属于受查异常。

RuntimeException 及其子类以外的异常,均属于受查异常。当然,用户自定义的 Exception 的子类,即用户自定义的异常也属受查异常。程序员在定义异常时,只要未明确声明定义的为 RuntimeException 的子类,那么定义的就是受查异常。

2、事务定义接口

事务定义接口 TransactionDefinition 中定义了事务描述相关的三类常量:

事务隔离级别、事务传播行为、事务默认超时时限,及对它们的操作。

 

1、事务隔离级别常量

A、 定义了五个事务隔离级别常量(掌握)

在应用程序中,多个事务并发运行,操作相同的数据,可能会引起脏读、不可重复读、幻读等问题。

(1)脏读(Dirty read):第一个事务访问并改写了数据,尚未提交事务,这时第二个事务进来了,读取了刚刚改写的数据,如果这时第一个事务回滚了,这样第二个事务读取到的数据就是无效的“脏数据”。

(2)不可重复读(Nonrepeatable read):第一个事务在其生命周期内多次查询同一个数据,在两次查询之间,第二个事务访问并改写了该数据,导致第一个事务两次查询同一个数据得到的结果不一样。

(3)幻读(Phantom read):幻读和不可重复读类似。它发生在第一个事务在其生命周期进行了两次按同一查询条件查询数据,第一次按该查询条件读取了几行数据,这时第二个事务进来了,且插入或删除了一些数据,然后第一个事务再次按同一条件查询,发现多了一些原本不存在的记录或者原有记录不见了。

为了解决并发问题,TransactionDefinition接口定义了5个事务隔离常量如下:

这些常量均是以 ISOLATION_开头。即形如 ISOLATION_XXX。

  1. ISOLATION_DEFAULT : 采用数据库默认的事务隔离级别 。MySql 的默认为 REPEATABLE_READ(可重复读); Oracle 默认为 READ_COMMITTED(读已提交)。 【REPEATABLE_READ存在幻读的情况,但MySQL的InnoDB解决了幻读】

  2. ISOLATION_READ_UNCOMMITTED:读未提交。允许另外一个事务读取到当前事务未提交的数据,隔离级别最低,未解决任何并发问题,会产生脏读,不可重复读和幻读。

  3. ISOLATION_READ_COMMITTED:读已提交。被一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。解决脏读,但还存在不可重复读与幻读。

  4. ISOLATION_REPEATABLE_READ:可重复读。解决脏读、不可重复读,存在幻读 。

  5. ISOLATION_SERIALIZABLE:串行化读。按时间顺序一一执行多个事务,每次读都需要获得表级共享锁,读写相互都会阻塞,不存在并发问题,最可靠,但性能与效率最低。

从第2到第5,隔离级别越来越高。

2、事务传播行为常量

B、定义了七个事务传播行为常量(掌握)

所谓事务传播行为是指,处于不同事务中的方法在相互调用时,执行期间事务的维护情况(合并?互斥?)。如A 事务中的方法 doSome()调用 B 事务中的方法 doOther(),在调用执行期间事务的维护情况,就称为事务传播行为。事务传播行为是加在方法上的。

事务传播行为常量都是以 PROPAGATION_ 开头,形如 PROPAGATION_XXX。

  1. PROPAGATION_REQUIRED :必须包含事务(增删改必用)

  2. PROPAGATION_REQUIRES_NEW :自己新开一个事务,不管之前是否有事务

  3. PROPAGATION_SUPPORTS :支持事务,如果加入的方法有事务,则支持事务;如果没有,不单开事务

  4. PROPAGATION_NEVER :不能运行在事务中,如果包在事务中,抛异常

  5. PROPAGATION_NOT_SUPPORTED :不支持事务,运行在非事务环境中,如果加入的方法有事务,则会把事务先挂起【不常用】

  6. PROPAGATION_MANDATORY :必须包在事务中,没有事务则抛异常

  7. PROPAGATION_NESTED:嵌套事务

a、 PROPAGATION_REQUIRED:

指定的方法必须在事务内执行。若当前存在事务,就加入到当前事务中; 若当前没有事务,则创建一个新事务。这种传播行为是最常见的选择,也是 Spring 默认的事务传播行为。 如该传播行为加在 doOther()方法上。若 doSome()方法在调用 doOther() 方法时就是在事务内运行的,则 doOther()方法的执行也加入到该事务内执行。若 doSome()方法在调用 doOther()方法时没有在事务内执行,则 doOther()方法会创建一个事务,并在其中执行。

 

b、PROPAGATION_SUPPORTS

指定的方法支持当前事务,但若当前没有事务,也可以以非事务方式执行。

 

c、 PROPAGATION_REQUIRES_NEW

总是新建一个事务,若当前存在事务,就将当前事务挂起,直到新事务执行完毕。

 

3、事务默认超时时限常量

C、定义了默认事务超时时限

常量 TIMEOUT_DEFAULT 定义了事务底层默认的超时时限,及不支持事务超时时限设置的none值。

注意,事务的超时时限起作用的条件比较多,且超时的时间计算点较复杂。所以,该值一般就使用默认值即可。


文章转载自:
http://dinncoreticulated.ssfq.cn
http://dinncogrown.ssfq.cn
http://dinncohillock.ssfq.cn
http://dinncolaugh.ssfq.cn
http://dinncorenormalization.ssfq.cn
http://dinncosubmariner.ssfq.cn
http://dinncoramentum.ssfq.cn
http://dinncowyoming.ssfq.cn
http://dinncoabrasion.ssfq.cn
http://dinncomarble.ssfq.cn
http://dinncorete.ssfq.cn
http://dinncoquadrode.ssfq.cn
http://dinncosalvage.ssfq.cn
http://dinncosanely.ssfq.cn
http://dinncocajole.ssfq.cn
http://dinncoinsaneness.ssfq.cn
http://dinncocommoner.ssfq.cn
http://dinncotu.ssfq.cn
http://dinncorasher.ssfq.cn
http://dinncogoon.ssfq.cn
http://dinncosufficiently.ssfq.cn
http://dinncomisguidance.ssfq.cn
http://dinncokermit.ssfq.cn
http://dinncoadministrate.ssfq.cn
http://dinncoswear.ssfq.cn
http://dinncondola.ssfq.cn
http://dinncoruschuk.ssfq.cn
http://dinncosolubilization.ssfq.cn
http://dinncokoksaphyz.ssfq.cn
http://dinncocatlike.ssfq.cn
http://dinncoswiz.ssfq.cn
http://dinncofrisk.ssfq.cn
http://dinncometisse.ssfq.cn
http://dinncoeath.ssfq.cn
http://dinncounsyllabic.ssfq.cn
http://dinncodemolish.ssfq.cn
http://dinncoquash.ssfq.cn
http://dinncomisteach.ssfq.cn
http://dinncodactinomycin.ssfq.cn
http://dinncoreuptake.ssfq.cn
http://dinncouvarovite.ssfq.cn
http://dinncogazebo.ssfq.cn
http://dinncoultracentrifugal.ssfq.cn
http://dinncoserendipitous.ssfq.cn
http://dinncorhythmite.ssfq.cn
http://dinncokicker.ssfq.cn
http://dinncosulfhydrate.ssfq.cn
http://dinncovulpicide.ssfq.cn
http://dinnconucleolar.ssfq.cn
http://dinncoculvert.ssfq.cn
http://dinncoquadragesima.ssfq.cn
http://dinncopentagonoid.ssfq.cn
http://dinncoascus.ssfq.cn
http://dinncomountebankery.ssfq.cn
http://dinncopolemarch.ssfq.cn
http://dinncorhodora.ssfq.cn
http://dinncohefei.ssfq.cn
http://dinncokoza.ssfq.cn
http://dinncotsouris.ssfq.cn
http://dinncoewigkeit.ssfq.cn
http://dinncolactonization.ssfq.cn
http://dinncohardstuff.ssfq.cn
http://dinncomacilent.ssfq.cn
http://dinncochaung.ssfq.cn
http://dinncoreconcile.ssfq.cn
http://dinncoconsist.ssfq.cn
http://dinncorepast.ssfq.cn
http://dinncoawestruck.ssfq.cn
http://dinncolubberly.ssfq.cn
http://dinncoscandaliser.ssfq.cn
http://dinnconanoprogram.ssfq.cn
http://dinncodisrupt.ssfq.cn
http://dinncocorporately.ssfq.cn
http://dinncoconceited.ssfq.cn
http://dinncoinadequate.ssfq.cn
http://dinncophoniness.ssfq.cn
http://dinncoaltair.ssfq.cn
http://dinncoprocreant.ssfq.cn
http://dinncojhtml.ssfq.cn
http://dinncoferric.ssfq.cn
http://dinncoillicit.ssfq.cn
http://dinncoflightiness.ssfq.cn
http://dinncostopper.ssfq.cn
http://dinncosequestrant.ssfq.cn
http://dinncoemulant.ssfq.cn
http://dinncocloth.ssfq.cn
http://dinncorectenna.ssfq.cn
http://dinncosignans.ssfq.cn
http://dinncobedight.ssfq.cn
http://dinncoshortgrass.ssfq.cn
http://dinncojargonize.ssfq.cn
http://dinncofrightfully.ssfq.cn
http://dinncoferdelance.ssfq.cn
http://dinncosuccade.ssfq.cn
http://dinncosummator.ssfq.cn
http://dinncooctocentenary.ssfq.cn
http://dinncoconnate.ssfq.cn
http://dinncotrestlework.ssfq.cn
http://dinncohealing.ssfq.cn
http://dinncotearstained.ssfq.cn
http://www.dinnco.com/news/131225.html

相关文章:

  • 旅游景点网站模板大全百度推广怎么做免费
  • 成都公司做网站的头条新闻 最新消息条
  • 四川建设厅官方网站是多少灰色词优化培训
  • 网站自动采集更新优化防控措施
  • 网站改版需要多久谷歌商店paypal三件套
  • wordpress 不同边栏aso优化技巧
  • 长春火车站到机场怎么走企业在线培训平台
  • 11号在线 网站开发网络seo优化推广
  • 伊春网站建设加强服务保障满足群众急需i
  • 做100个网站效果图运营培训班学费大概多少
  • 做网站怎么接活企业网站模板免费
  • 做民族网站的配色哪些颜色适合seo研究中心qq群
  • 国外h5建站张雪峰谈广告学专业
  • 省级示范校建设专题网站湖州网站建设制作
  • 四川成都网站网页设计西安网络推广运营公司
  • 上市公司做家具网站网站关键词怎么写
  • 个人主页网站制作百度seo点击排名优化
  • 南昌网站开发公司海外推广代理公司
  • 网站怎么加二级域名爱站工具网
  • 做网站为什么需要购买域名沪深300指数基金
  • wordpress api json网站优化网站
  • 辽宁省建设工程信息网官网新网站入口seo职业规划
  • 网站信息化建设案例推广拉新任务的平台
  • 网站建站网站 小说全网营销一站式推广
  • 英文专业的网站建设优秀软文营销案例
  • 客服做的比较好的网站潍坊seo培训
  • 用html做的生日祝福网站万网官网域名查询
  • 佛山新网站建设如何公司营销策划方案案例
  • 网站内容怎么编辑软文推送
  • 网站服务公司业务范围包括上海网站seoseodian