您好,登錄后才能下訂單哦!
這篇文章主要講解了“springboot怎么解決多個deploy執行schedule定時器導致并發問題”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“springboot怎么解決多個deploy執行schedule定時器導致并發問題”吧!
springboot部署多個相同服務deploy,當服務中有定時器時,一旦定時器觸發時服務會同時執行,從而產生并發問題。解決方案:
1.在定時器類添加@Profile 注解 指定實例執行定時器。
@Component @Configuration @EnableScheduling // 1.開啟定時任務 @Profile("deploy01") public class ScheduleTaskService { .... }
它操作簡單,靈活。只需要添加@Profile注解,但它的局限性也很明顯,只有指定服務為deploy01時才會加載定時器處理類,一旦deploy01 掛掉或者未啟動就無法執行。所以并不能達到高可用。
2.利用redis 緩存機制
@Scheduled(cron = "0 0 0/1 * * ? ") //每1小時執行一次 public void insertPriRecoverCall() throws InterruptedException { String deployKey="deployName"; redisService.set(deployKey,deployId,1,TimeUnit.HOURS); Object o = redisService.get(deployKey); if (o!=null){ String deployName = o.toString(); if (deployId.equals(deployName)){ logger.info(deployName+" is running ....."); ////業務代碼 } } }
先獲取服務實例Id,緩存到redis中。redis 是key-value 鍵值對的緩存機制。在相同key下只會保留一個deployId ,再取出緩存中deployId和服務實例id 比較。相同就繼續執行業務代碼,不同則直接過濾。這樣既可以防止并發問題,又可以實現高可用。
感謝各位的閱讀,以上就是“springboot怎么解決多個deploy執行schedule定時器導致并發問題”的內容了,經過本文的學習后,相信大家對springboot怎么解決多個deploy執行schedule定時器導致并發問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。