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

在Spring Boot应用程序中在一个事务中包装多个调用?

房新翰
2023-03-14

我在spring应用程序中使用jdbctemplate对db执行查询。

下面是用@Transactional注释的方法

@Transactional
public boolean doSomething(){    
    try {
        jdbcTemplate.update(sql1); //1
        jdbcTemplate.update(sql2); //2
        jdbcTemplate.update(sql3); //3
        return true; 
    } catch (Exception ex){
        return false;
    }
}

我的问题是,如果1和2成功而3失败,那么1和2上的事务是否会回滚?我怎么测试这个?

共有1个答案

卢志强
2023-03-14

不!如果您捕捉到异常,您的sql将不会回滚!!!!

这不会触发回滚。您需要移除试捕器。但是,是的,如果引发运行时异常,这些将按预期回滚。请参考下面的文档。

@事务性设置

正如上面所要求的,这也适用于存储库,您可以在这里看到一个示例

Spring数据(存储库)事务

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions

 类似资料:
  • 问题内容: 我是Spring的新手,我想知道是否可以在同一应用程序中使用多个事务管理器? 我有两个数据访问层-一个用于两个数据库。我想知道,你如何在一个层使用一个事务管理器,而在另一层使用另一个事务管理器。我不需要在两个数据库之间都执行事务。但是我确实需要分别在每个数据库上执行事务。我创建了一个图像来帮助概述我的问题: 这是我的应用程序上下文配置: 这是使用此配置的示例: 因此,对于帐户存储库,我

  • 问题内容: 这个问题是我继续研究Docker的一部分,并且在某些方面跟进了我先前的问题之一。我现在已经了解了如何通过将一堆Docker容器链接在一起来获得完整的应用程序堆栈(实际上是微型VPS)。例如,可以创建一个堆栈,为Apache+ PHP5提供一堆扩展名+ Redis + MemCached+MySQL,它们都在Ubuntu上运行,无论是否带有附加数据容器,都可以轻松地序列化用户数据。 一切

  • 问题内容: 我想通过JDBC连接到两个不同的Oracle数据库(一个8.0.5.0.0和一个12c)。我确实有两个JDBC驱动程序,它们可以通过简单的“ hello world”应用程序分别成功地连接到相应的DB。下面,我将它们都放在一个Java应用程序中,不幸的是,该应用程序不再起作用(加载了两个驱动程序)。 我已经阅读了这篇文章:从SAMEVENDOR处理多个JDBC驱动程序。提到的选项1可能

  • 问题内容: 我想防止在Java中启动应用程序的多个实例。我知道两种方法: 锁定文件 锁紧插座 但是,哪一个是更有效且更易于使用的呢?我应该使用哪一个? 同样欢迎任何其他解决方案。 问题答案: 编辑:我尝试使用Win200864b(版本不重要)和JFrame并通过JFrame在SystemTray中移动到Front()或图标化。DO_NOTHING_ON_CLOSE

  • 问题内容: 我无法使用Flask在同一应用程序中成功使用Python请求调用第二条路由。我知道最好的做法是直接调用该函数,但是我需要它使用请求使用URL进行调用。例如: 问题答案: 您的代码假定您的应用程序可以一次处理多个请求:初始请求,以及在处理初始请求时生成的请求。 如果您正在运行像这样的开发服务器,则默认情况下,它在一个线程中运行;因此,它一次只能处理一个请求。 用于在开发服务器中启用多个线