当前位置: 首页 > 后端技术 > Java

史上最详解Spring事务,动力节点Spring框架从入门到精通学习教程

时间:2023-04-01 20:16:08 Java

Spring的事务管理transaction本来就是数据库中的一个概念,在Dao层。但是一般来说,事务需要提升到业务层,也就是Service层。这样做是为了能够利用事务的特性来管理特定的业务。在Spring中,事务管理通常可以通过以下两种方式实现:(1)使用Spring的事务注解来管理事务(2)使用AspectJ的AOP配置来管理事务Spring事务管理APISpring的事务管理主要使用了两个Transaction相关的接口。(1)事务管理器接口(重点)事务管理器是PlatformTransactionManager接口对象。主要用于完成事务的提交和回滚,获取事务的状态信息。A.两个常用的实现类PlatformTransactionManager接口有两个常用的实现类:?DataSourceTransactionManager:使用JDBC或MyBatis进行数据库操作时使用。?HibernateTransactionManager:使用Hibernate持久化数据时使用。B.Spring的回滚方式(理解)Spring事务默认的回滚方式是:运行时异常和错误发生时回滚,检查(编译)异常时提交。不过对于checkedexceptions,程序员也可以手动设置回滚方式。C.查看错误和异常(理解)Throwable类是Java语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,它才能被Java虚拟机或Java的throw语句抛出。Error是程序运行过程中无法处理的错误,如OutOfMemoryError、ThreadDeath、NoSuchMethodError等,当这些错误发生时,程序无法处理(catch或throw),JVM一般会终止线程。程序编译运行时出现的另一类错误称为异常,是JVM通知程序员的一种方式。通过这种方式告知程序员已经或可能已经发生错误,需要程序员进行处理。异常分为运行时异常和检查异常。运行时异常,即RuntimeException类或其子类,是仅在运行时发生的异常。例如NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException等都是运行时异常。这些异常由JVM抛出,不需要在编译时处理(捕获或抛出)。但只要仔细编写代码,程序足够健壮,运行时异常是可以避免的。已检查异常,也称为编译时异常,是编写代码时必须捕获或抛出的异常。如果不处理,编译将不会通过。如SQLException、ClassNotFoundException、IOException等都是checkedexception。除了RuntimeException及其子类之外的异常都是检查异常。当然,user-definedException的子类,即user-definedexception也是checkedexception。当程序员定义异常时,只要定义没有显式声明为RuntimeException的子类,就会检查定义的异常。(2)事务定义接口TransactionDefinition定义了三类与事务描述相关的常量:事务隔离级别、事务传播行为、事务默认超时时间,以及它们的操作。A.定义了五个事务隔离级别常量(master)。这些常量都以ISOLATION_开头。即以ISOLATION_XXX的形式。?DEFAULT:使用DB默认的事务隔离级别。MySql的默认是REPEATABLE_READ;Oracle的默认是READ_COMMITTED?READ_UNCOMMITTED:读未提交。没有解决并发问题。?READ_COMMITTED:读已提交。解决脏读、不可重复读和幻读。?REPEATABLE_READ:可重复读。解决脏读、不可重复读、幻读?SERIALIZABLE:序列化。没有并发问题。B.定义七个事务传播行为常量(掌握)所谓事务传播行为是指不同事务中的方法相互调用时事务在执行过程中的维护。例如,事务A中的方法doSome()调用事务B中的方法doOther(),调用执行过程中事务的维护称为事务传播行为。事务传播行为被添加到方法中。事务传播行为常量均以PROPAGATION_开头,形式为PROPAGATION_XXX。PROPAGATION_REQUIREDPROPAGATION_REQUIRES_NEWPROPAGATION_SUPPORTSPROPAGATION_MANDATORYPROPAGATION_NESTEDPROPAGATION_NEVERPROPAGATION_NOT_SUPPORTEDa,PROPAGATION_REQUIRED:指定的方法必须在事务内执行。如果有当前交易,则添加到当前交易;如果没有当前事务,将创建一个新事务。这种传播行为是最常见的选择,也是Spring默认的事务传播行为。例如,将传播行为添加到doOther()方法中。如果调用doOther()方法时doSome()方法正在事务中运行,则doOther()方法的执行也加入到事务中。如果在调用doOther()方法时doSome()方法没有在事务中执行,doOther()方法会创建一个事务并在其中执行。b.PROPAGATION_SUPPORTS指定的方法支持当前事务,但是如果没有当前事务,也可以以非事务的方式执行。C。PROPAGATION_REQUIRES_NEW总是创建一个新事务。如果有当前事务,则当前事务会被挂起,直到新事务执行完毕。C.定义默认事务超时常量TIMEOUT_DEFAULT定义了事务底层的默认超时时间,以及sql语句的执行时间。注意事务超时限制起作用的条件有很多,超时时间的计算也比较复杂。因此,该值一般使用默认值。Spring学习教程力节点的spring视频教程主要讲解Spring的使用和应用。内容几乎涵盖了实际工作中可能用到的所有知识点。学习spring,看这组视频就够了。Spring学习资料源码下载:http://www.bjpowernode.com/?s...