在DB肯定后,如何记录数据。

问题描述 投票:0回答:1
I使用Java Spring创建代码,该代码基本上将特定值存储在DB中。

如果值节省成功,我想保留成功日志。最初,我像下面的代码一样,在底部留下了一个日志。

@Transactional public void save(Long id, String target) { repository.save(id, target); log.info("save success! -> id : {}, target : {}", id, target); }

woding,在记录的那一刻,这些值尚未反映在DB中,因此,如果以后逻辑出现问题,则将记录日志,但实际上不会保存值。所以我意识到自己正在登录错误的地方。 where是一个问题:作为解决方法,我打算在DB提交(即实际保存该值之后)并寻找信息后使用

TransactionalEventListener
进行日志。
,但是,我很难找到为此目的使用听众的例子,所以我想知道为此目的使用

TransactionalEventListener

是否是正确的方法,如果没有,还有哪些其他方法可以收集可靠的方法这样的日志?

感谢您的帮助

由于
@Transactional

注释,为此方法维护了

ACID

属性。这意味着 最终数据库提交发生在该方法成功运行而没有任何错误之后发生。但是,由于记录器是 您的方法,它在将数据保留数据库内之前打印了日志。 您可以通过多种方式处理这一点。其中一个是使用另一个,您可以使用
java spring
1个回答
0
投票
.

这里是
@TransactionalEventListener
的一个例子 listener

TransactionalEventListener
event

@Component
@Slf4j
public class TransactionLogEventListener {
  @EventListener
  @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
  public void handleTransactionEvent(TransactionLogEvent event) {
    log.info("save success! -> id : {}, target : {}", event.getId(), event.getTarget());
  }
}

@Getter public class TransactionLogEvent extends ApplicationEvent { private final Long id; private final String target; public TransactionEmailEvent(Object source, Long id, String target) { super(source); this.id = id; this.target = target; } }

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.