如何在事務提交後才執行某個方法

2022-07-12 02:48:12 字數 795 閱讀 1397

開發過程中經常出現如下場景;

新增一篇文章,然後發乙個廣播mq出去;

廣播監聽者監聽到訊息然後根據文章id回查文章內容;

但是此時新增文章的方法的事務還沒有提交,根據id回查資料庫的時候查到資料為空。

**如下:

@transactional

public void add文章()

此時我們希望的效果是,等事務提交之後再發mq。

可以改成如下寫法:

public void add文章() 

@transactional

public void insert文章()

但是這樣每次涉及這樣的業務都需要包一層,而且很多時候並不知道呼叫add文章的外層是否還有@transactional註解

我們希望達到的效果是註冊乙個mq事件,等事務提交後再出發我們的mq事件

嵌入如下**,可以註冊乙個事務事件,在事務提交之後才出發我的方法。

transactionsynchronizationmanager.registersynchronization(new transactionsynchronizationadapter() 

});

總的寫法如下:

@transactional

public void add文章()

});}

這樣mq的方法就會在事務提交後才出發。這樣回查的時候就不會空了。

mysql事務沒有提交後的分析

首先事務開啟後,在commit之前,只是將其內容寫入日誌,commit後才會真正寫入資料庫。那麼,如果乙個事務沒有提交,此時別的事務能讀取到它的內容嗎?是可以的,在於資料庫事務的隔離級別,mysql預設下為read repeatable,是不能讀取未提交的內容的,將其設定為read uncommit...

如何在github上提交pr

git remote add upstreamgit remote vgit checkout b fix npegit add git commit m fix npe git push origin fix npe 將當前分支推送到自己的遠端倉庫 注意事項 每次pr之前,首先與遠端倉庫做 同步 ...

如何在Spring Boot開啟事務

今天給大家介紹如何在spring boot中開啟事務,希望大家喜歡。說到事務,那什麼是事務呢?事務 transaction 一般是指要做的或所做的事情。那麼如何在spring boot中使用呢?其實只需要兩步即可 在service實現類的方法上新增 transactional註解。具體實現 pack...