在本文中,我们将讨论在 @Transactional 块内发布消息的需求以及相关的性能挑战,例如延长的数据库连接时间。为了解决这个问题,我们将利用 Spring Modulith 的特性来监听 Spring 应用程序事件,并自动将它们发布到 Kafka 主题。
2. 事务性操作和消息代理
对于本文的代码示例,我们假设我们正在编写负责在 Baeldung 上保存 Article 的功能:
@Service
class Baeldung {
private final ArticleRepository articleRepository;
// 构造函数
@Transactional
public void createArticle(Article article) {
validateArticle(article);
article = addArticleTags(article);
// ...其他业务逻辑
articleRepository.save(article);
}
}
大约 9 分钟