Spring @Transactional如何“停止”交易

用户名

我有一个控制器,该控制器在服务类上调用方法,该方法应执行以下操作:

  1. 更新数据库(使用DAO 1)
  2. 更新数据库(使用DAO 2)
  3. sendEmail(使用电子邮件服务)

(1)和(2)应该是原子的,如果都成功,则应该发送电子邮件。如果我用@Transactional注释服务方法,即使数据库更新失败(这也是不希望的),也会发送电子邮件。此外,如果电子邮件失败,则将回滚数据库更新(也不希望这样做)。

我的理解是,将3.转移到同一服务类上的单独方法将无济于事。用@Transactional和其他传播行为(例如NEVER或REQUIRES_NEW)注释sendEmail方法似乎也无济于事。

是否可以通过适当的注释来实现此行为?

JB Nizet

您需要在前两个步骤中进行交易,然后提交交易,最后发送电子邮件。最简单的方法是引入一个额外的bean

控制器:

beanA.process();

豆A:

// not transactional
public void process() {
    beanB.updateDatabase();
    sendEmail();
}

private void sendEmail() {
    ...
}

豆B:

@Transactional
public void updateDatabase() {
    dao1.update();
    dao2.update();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring @Transactional如何“停止”交易

来自分类Dev

@Transactional Spring没有创建新的交易

来自分类Dev

Swing + Spring + @Transactional =未开始交易

来自分类Dev

Spring的交易暂停如何运作?

来自分类Dev

Spring Converter如何获得交易范围?

来自分类Dev

如何配置Spring以将aspectj用于Transactional?

来自分类Dev

如何手动处理Spring 4交易?

来自分类Dev

如何在多个Spring集成渠道之间传播单个交易

来自分类Dev

Spring收到交易后如何刷新页面?

来自分类Dev

Spring数据JPA @Transactional

来自分类Dev

Spring @Transactional 隔离传播

来自分类Dev

当@ActiveProfiles(“ test”)时,如何忽略特定方法的spring @Transactional批注

来自分类Dev

Spring @Transactional和Hibernate @LockMode批注如何关联

来自分类Dev

如何停止或更改 Spring Integration Poller 的延迟

来自分类Dev

链式交易API调用Spring

来自分类Dev

在Spring MVC中管理交易

来自分类Dev

spring @transactional线程安全吗?

来自分类Dev

在类与方法上的Spring @Transactional

来自分类Dev

Spring @Transactional未提交记录

来自分类Dev

Spring @Transactional注释的行为很奇怪

来自分类Dev

Spring @Transactional无法正常工作

来自分类Dev

Spring Singleton @Transactional并发访问

来自分类Dev

Spring @Transactional方法和类

来自分类Dev

Spring 无法识别 @Transactional 注释

来自分类Dev

Spring boot @Transactional 不回滚

来自分类Dev

在Spring MVC中完成第一次交易后如何调用方法

来自分类Dev

在Spring MVC中完成第一次交易后如何调用方法

来自分类Dev

在Spring中停止线程

来自分类Dev

如何使Spring @Transactional在所有未捕获的异常上回退?

Related 相关文章

热门标签

归档