開發過程中經常出現如下場景;
新增一篇文章,然後發乙個廣播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...