当前位置: 首页 > 知识库问答 >
问题:

用法@事务注释有必要吗?Spring开机

呼延烈
2023-03-14

所以我是Spring的新人,目前对@Transactional Annoting感到困惑,我已经阅读了很多关于这个主题的问答,但似乎我仍然不明白。

这是我的问题:

> < li>

执行插入更新删除时是否需要@Transactional批注?当我试图证明这一点时,我仍然可以执行插入和更新。你知道为什么会这样吗?

如果使用或不使用@Transactional注释,会有什么性能好处或问题吗?比如连接管理。

如果我的程序中不使用@Transactional Annoting会发生什么?

根据我使用@Transactional的经验,更新查询将在方法完成后刷新并提交,并且我在某些情况下不希望发生这种情况。例如:

@Transactional
private void doSomething() {
   TransactionEntity te = te.findById("");
   try {
      //fetch using feign and throw customTimCustomTimeoutException 
   } catch (CustomTimeoutException e) {
      te.workflowFailure("doSomething");
      repository.save(te);
   }
   //validation
   //business logic
   //save this save that
   //end of method and changes will be flushed and committed
}

如果在方法结束时,数据库脱机,它会右回滚,你会失去所有的进度。即使在catch block语句的repository.save(te)中,数据库还是正常的,你也不想失去这个进度。对此有什么解决方案或想法吗?

谢谢。

共有1个答案

东郭宏深
2023-03-14
  1. 使用 Crud 存储库接口时,您不需要为 CRUD 操作@Transactional。默认情况下,所有这些方法都是事务性的。我猜你是在用这个。退房 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions
  2. 当您将方法标记为读取方法的@Transactional(readOnly = true)时,将显示性能优势。例如,看看简单Jpa存储库。
  3. 默认情况下,只有 CRUD 操作是事务性的。在其他情况下,您必须使用@Transactional否则您将获得“java.lang.非法状态异常:没有可用的事务性实体管理器”。
  4. 这取决于你会得到什么样的例外。如果是运行时,您将获得回滚同意。但是,如果它是选中的异常,则可以捕获它并决定是否要刷新数据。如果您在数据库上有一些繁重的操作,并且您不想丢失此进度,则最终可以多次刷新,这取决于用例。
 类似资料:
  • 在我的应用程序中,我有2个transactionManager,创建如下: 在同一个文件中,我有注释驱动的声明: 为了简化admin transactionManager的可用性,我创建了一个简单的注释: 这是我的带有事务注释的方法: 由于有接口,该方法是从另一个类调用的。bean由Spring@Autowired注释注入。jdbcTemplate对象是用以下代码创建的: 我的问题是当我执行jdb

  • 试图收集和理解@事务性注释的要点并越过了一点。因此,在使用事务性注释时,我们需要记住的主要事情是: 事务注释只能应用于公共方法[根据Spring@Transactional属性对私有方法起作用吗? 事务性注释应该应用于具体的类,而不是接口[根据我应该将@transactional annotation放在接口定义还是实现类的位置? 事务注释应应用于服务级别[根据Spring@Transaction

  • 问题内容: 之间有什么区别? 在整个类中添加“ @Transactional”注释 为每个方法添加“ @Transactional”注释? 使用spring和Hibernate吗? 问题答案: 基本上,如果您用所有方法注释该类,则将是事务性的。如果您不这样做,则可以仅将其标注为所需的方法。此外,你可以为每个方法指定不同的属性,如,,,…

  • 我正在使用Spring(3.1.4版本)和HibernateTemplate(3.6.7.Final)以及Spring数据JPA(1.3.0版本)。我在配置文件中定义了两个事务管理器,一个用于Hibernate,另一个用于Spring数据JPA。两个事务管理器使用不同的数据源。 我想在代码中使用Hibernate的事务管理器和Spring data JPA的事务管理器。(Spring文档链接-10

  • 在我们的一个项目中,我们遇到了一个问题,Spring忽略了事务注释,然后失败了,出现了以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2018-09-13 15:05:18406错误[主]组织。springframework。靴子SpringApplication应用程序运行失败组织。springframework。道。Inva

  • 我将Spring 3.2.4与JavaFX结合使用,并希望实现一种方法,其中操作将在事务中执行。我在控制器中的代码如下所示: 以及我的应用程序上下文: 尝试运行时,我收到以下错误消息: 该方法存在。删除注释,或者将方法从public更改为private,或者从配置中删除bean,程序就会运行,但事务注释根本不起作用。删除代理目标会导致另一个错误。