当前位置: 首页 > 网络应用技术

详细的春季系列春季声明(@transactional)

时间:2023-03-07 01:23:19 网络应用技术

  SO称为语句交易是通过配置方法来告诉Spring,例如配置文件(XML)或注释方法,哪种方法需要Spring来帮助管理交易,然后开发人员仅注意商业代码和交易事务Spring Automatic帮助我们控制。

  例如,注释方法,只需在方法上添加注释,然后弹簧将在方法执行之前自动打开事务。执行方法后,将提交或回滚。方法内没有交易相关的代码。

  配置文件的方法不会在这里讨论,我们使用的方法相对较少。我们主要掌握如何使用注释方法。

  1.启用Spring的注释驱动程序管理功能以将注释添加到Spring配置类

  简要介绍以下原则:当弹簧容器启动时,发现找到@enabletransactionManagement评论。目前,所有bean都将被拦截,以查看bean上是否有@transactions(类,父,界面或界面或方法)。如果有此注释,Spring将生成一个通过AOP对BEAN的代理对象。拦截器将添加到代理对象中。拦截器将在执行该方法后的bean.submit或回滚中拦截公共方法。Later,将有一篇特殊文章向您展示本文的源代码。

  如果您有兴趣,则可以首先阅读源代码,主要是因为以下方法将是

  让我们看一下enabletransactions的源代码

  2.将交易管理器事务定义为春季管理,然后您必须创建一个或多个交易经理。这些经理可以管理特定的交易,例如开始交易,提交交易和回滚交易。这些是管理。这些是管理人员。

  Spring使用PlatformTransActionManager界面来表示交易经理。

  PlatformTransactionManager多个实现类用于应对不同的环境

  JPATRACTIONMANAGER:如果您使用JPA操作DB,则需要使用此管理器来帮助您控制交易。

  datasourcetransactionManager:如果使用指定数据源的方法,例如操作数据库:JDBCTEMPLATE,MYBATIS,IBATIS,则需要使用此管理器来帮助您控制交易。

  Hibernatetransactions:如果您使用Hibernate操作DB,则需要使用此管理器来帮助您控制交易。

  JTATRANSACTIONMANAR:如果您在Java中使用JTA操作DB,则通常是分布式交易。目前,您需要使用此管理器来控制交易。

  例如:我们使用MyBatis或JDBCTEMPLATE,然后通过以下方式定义事务管理器。

  3.将@transactions添加到交易目标。让我们看一下@transactions的源代码:

  参数简介

  值指定事务管理器的名称。如果容器中有一个多传输Man Manager平台TransActionManager,则您必须告诉Spring,当前配置需要哪个事务管理器,并且可以选择一个事务管理器的值和事务管理器的值,一个值和事务管理器的值或者也可以是空的。如果它是空的,请根据类型在默认场所中找到事务管理器bean传播的传输属性。下一篇文章详细介绍了隔离交易,即开发数据库的隔离级别。您知道数据库隔离级别吗?如果您不知道,可以弥补超时交易超时的超时时间(第二)。例如,如果有问题,我迫不及待地等您一天。也许我只能等您10秒和10秒钟。完成后,弹出一个例外时间,无论阅读读书是仅仅是读取的交易。例如,只有某种方法中只有查询操作。我们可以指定事务设置为设置此参数。也许数据库将进行一些性能优化,以改善查询速度回滚,以定义Zero(0)或更多异常类别。这些异常类必须是可投掷的子类。当该方法抛出这些异常及其子类异常时,Spring将使交易如果不应有,则默认值将在RuntimeException..ors中,或者在错误的情况下,交易将返回到RollbackForClassName and Rollbackfor,但是但是,但是这个地方使用类别Norollbackfor来定义零(0)或更多异常类别。当异常时,交易不会回滚NorollbackforClassName和NorollBackfor,但是此地方使用类名称4.执行DB业务运营以在 @ @ @ @ @交易标记为类别或目标方法。在这个时机。

  例如,下面的InsertBatch操作,首先删除数据,然后批量插入数据。该方法是用@transactional注释添加的。目前,此方法将由春季交易自动控制,即成功或失败。

  5.启动弹簧容器并使用BEAN执行业务操作

  准备数据库

  春季配置类

  @1:使用@enabletractionManagement

  @2:定义事务管理器

  参加商务舱

  @1: @transactional注释添加了insertbatch方法,因此弹簧来自此方法来添加交易

  测试课

  运行输出

  一些朋友可能会问,您怎么知道是否使用了电话?让我们在下面看看。

  弹簧由TransActionInterceptor Interceptor处理。最后,将调用以下方法。设置断点以查看详细过程。

  ![图片]()

  春季处理交易的过程,有详细的日志输出,打开日志,控制台可以看到详细的交易过程。

  添加Maven配置

  srcmain Esourcess new LogBack.xml

  让我们再次运行案例1

  让我们了解logBatch方法中的@transaction注释,因此它将被拦截器拦截。以下是插入方法调用之前的交易。

  insertBatch方法是@Transaction注释参数上的所有默认值。 @TrassAction注释可以由事务管理器指定,但未指定。目前,Spring将在容器中找到交易管理器类型的默认值。一个定义了,因此可以直接使用。我们使用Transaction Manager从交易管理器的数据源中获取数据库连接,然后设置交易以手动提交,然后将其(dataSource-> this Connection)扔到threadlocal.an文章中。

  以下是插入方法的内部。通过执行一些数据库操作的JDBCTEMPLATE,JDBCTEMPLATE将连接到上述螺纹插座中的弹簧交易,然后执行DB操作。

  执行插入方法后,没有例外,因此Spring开始通过数据库连接提交交易。

  本文解释了在春季使用编程的步骤。

  主要涉及2个注释:

  @EnableTransactionManagement:开放春季交易管理功能

  @transaction:将其添加到需要春季管理事务的类,方法和接口中,这仅对公共方法有效。

  让我们再次消化,有问题,请留言进行交流。

  原始:https://juejin.cn/post/7098135391579930631