我在Service类中看到了一种被标记为的方法@Transactional
,但是它也在同一类中调用了其他未标为的方法@Transactional
。
这是否意味着对单独方法的调用导致应用程序打开与DB的单独连接或暂停父事务等?
不带任何注释的方法的默认行为是什么,而另一个带有@Transactional
注释的方法调用该方法的默认行为是什么?
当你调用没有@Transactional
事务块之内的方法时,父事务将继续使用新方法。它将使用与父方法(with @Transactional
)相同的连接,以及在调用的方法中@Transactional
导致的任何异常(不使用该异常将导致事务按照事务定义中的配置回滚。
如果@Transactional
从具有@Transactional
相同实例的方法中调用带有注释的方法,则被调用方法的事务行为将不会对事务产生任何影响。但是,如果从具有事务定义的另一个方法中调用具有事务定义的方法,并且它们处于不同的实例中,则被调用方法中的代码将遵循被调用方法中给出的事务定义。
你可以发现在部分中详细声明式事务管理的spring交易文件。
Spring声明式事务模型使用AOP代理。因此,AOP代理负责创建交易。仅当从实例外部调用实例中包含的方法时,AOP代理才会处于活动状态。
问题内容: 美好的一天。如下代码: 据我了解,如果方法中存在异常,则不会回滚事务。以及如何使它滚动?并返回SomeResult 问题答案: 您不应该以编程方式调用回滚。根据docs的建议,最好的方法是使用声明性方法。为此,您需要注释哪些异常将触发回滚。 在你的情况下,像这样 看一下@Transaction API 和有关回滚事务的文档。 如果尽管有文档建议,但仍要进行程序化回滚,则需要按照已建议的
问题内容: 在Spring中,带有注释的方法 将获得一个新的事务(如果还没有),但是我注意到,如果从非事务处理方法调用事务方法,则不会获得任何事务。这是代码。 是一个常规方法,该方法调用是事务性的,但不会保留任何更改。 我正在使用Spring 3和Hibernate3。在这里我做错了什么?谢谢。 问题答案: 这是Springs AOP的局限性之一。因为dao bean实际上是在spring时创建的
我正在使用带有webflux的spring boot 2.4.2连接到postgres数据库。我在使用事务性代码时观察到了一个我不理解的行为。 为了展示这种行为,我创建了一个示例应用程序,试图将行添加到两个表中;表“a”和表“b”。对表“a”的插入预计将失败,并出现重复密钥冲突。考虑到使用了事务性,我希望不会向表“b”中添加任何行。 然而,根据我用哪个方法注释事务,我会得到不同的结果。 如果我对c
问题内容: 有没有简单的解决方案,可以在新线程中使用JPA将数据保存到数据库中? 我基于Spring的Web应用程序允许用户管理计划的任务。在运行时,他可以创建和启动预定义任务的新实例。我正在使用spring的TaskScheduler,并且一切正常。 但是我需要将每个被激发任务的布尔结果保存到数据库中。我怎样才能做到这一点? 编辑:我必须概括我的问题:我需要从任务在我的@Service类上调用方