0
我們的應用程序是在Spring 4 + Hibernate 4中編寫的,並在兩個節點上運行。在每個晚上,我們都想運行cron job(@Scheduled;假設在凌晨2點)執行DELETE
查詢(負責清理數據庫表)。表可以包含很多條目(約60毫升),我們可能會一次刪除30毫升。由於有兩個節點,它會被執行兩次,我們可能會在桌面上產生死鎖(對嗎?)。如何應對這個問題(樂觀鎖,悲觀鎖,其他解決方案)?我們想要做的只是在一個節點上運行刪除操作,並在另一個節點上阻止它。SQL刪除死鎖
編輯 節點被克隆但使用相同的數據庫服務器(oracle或mysql)。
Server A Server B
(application) (application)
| |
cron cron
(executed every day at 2am) (executed every day at 2am)
| |
| |
\ sql server /
(oracle or mysql)
cron是隻是一個春天@scheduled
方法,像這樣:
@Scheduled(cron = "0 0 2 * * *")
public void deleteEntries() {
final String queryString = "DELETE FROM MyDto m WHERE date<:date";
Query query = entityManager.createQuery(queryString);
query.setParameter("date", new Date());
query.executeUpdate();
}
綜上所述,問題是: 有沒有可能查詢會失敗(因爲在執行同時)?如果是 - 如何解決問題?
你在運行mysql還是oracle? – kevinsky
兩者。這取決於客戶。 – pepuch
那麼你是在運行兩個節點的Oracle RAC還是兩個節點的MySQL?您需要向我們提供有關您的設置的更多詳細信息 – kevinsky